From b4d5056da527721ae3be75b75c7cbd66f0e7ffcd Mon Sep 17 00:00:00 2001 From: Mason Chang Date: Thu, 16 Feb 2017 15:05:34 -0800 Subject: [PATCH 1/9] Bug 1340317 - Support box shadow outer offset and spread radius in WebRender box shadows. r=lsalzman --- gfx/webrender_bindings/WebRenderTypes.h | 8 +++ gfx/webrender_bindings/webrender_ffi.h | 1 + layout/painting/nsCSSRendering.cpp | 87 ++++++++++++++++--------- layout/painting/nsCSSRendering.h | 12 ++++ layout/painting/nsDisplayList.cpp | 59 ++++++++++------- 5 files changed, 111 insertions(+), 56 deletions(-) diff --git a/gfx/webrender_bindings/WebRenderTypes.h b/gfx/webrender_bindings/WebRenderTypes.h index 360ebd55672d..87443bcc95e6 100644 --- a/gfx/webrender_bindings/WebRenderTypes.h +++ b/gfx/webrender_bindings/WebRenderTypes.h @@ -227,6 +227,14 @@ static inline WrRect ToWrRect(const gfx::IntRectTyped& rect) return ToWrRect(IntRectToRect(rect)); } +static inline WrPoint ToWrPoint(const gfx::Point& point) +{ + WrPoint p; + p.x = point.x; + p.y = point.y; + return p; +} + struct ByteBuffer { ByteBuffer(size_t aLength, uint8_t* aData) diff --git a/gfx/webrender_bindings/webrender_ffi.h b/gfx/webrender_bindings/webrender_ffi.h index e57dd636ea15..c14073f20216 100644 --- a/gfx/webrender_bindings/webrender_ffi.h +++ b/gfx/webrender_bindings/webrender_ffi.h @@ -283,6 +283,7 @@ struct WrPoint return x == aRhs.x && y == aRhs.y; } + operator mozilla::gfx::Point() const { return mozilla::gfx::Point(x, y); } }; struct WrImageMask diff --git a/layout/painting/nsCSSRendering.cpp b/layout/painting/nsCSSRendering.cpp index 9a3a86bd2418..fa4c1371e564 100644 --- a/layout/painting/nsCSSRendering.cpp +++ b/layout/painting/nsCSSRendering.cpp @@ -1369,6 +1369,56 @@ nsCSSRendering::EndFrameTreesLocked() } } +bool +nsCSSRendering::HasBoxShadowNativeTheme(nsIFrame* aFrame, + bool& aMaybeHasBorderRadius) +{ + const nsStyleDisplay* styleDisplay = aFrame->StyleDisplay(); + nsITheme::Transparency transparency; + if (aFrame->IsThemed(styleDisplay, &transparency)) { + aMaybeHasBorderRadius = false; + // For opaque (rectangular) theme widgets we can take the generic + // border-box path with border-radius disabled. + return transparency != nsITheme::eOpaque; + } + + aMaybeHasBorderRadius = true; + return false; +} + +gfx::Color +nsCSSRendering::GetShadowColor(nsCSSShadowItem* aShadow, + nsIFrame* aFrame, + float aOpacity) +{ + // Get the shadow color; if not specified, use the foreground color + nscolor shadowColor; + if (aShadow->mHasColor) + shadowColor = aShadow->mColor; + else + shadowColor = aFrame->StyleColor()->mColor; + + Color color = Color::FromABGR(shadowColor); + color.a *= aOpacity; + return color; +} + +nsRect +nsCSSRendering::GetShadowRect(const nsRect aFrameArea, + bool aNativeTheme, + nsIFrame* aForFrame) +{ + nsRect frameRect = aNativeTheme ? + aForFrame->GetVisualOverflowRectRelativeToSelf() + aFrameArea.TopLeft() : + aFrameArea; + Sides skipSides = aForFrame->GetSkipSides(); + frameRect = ::BoxDecorationRectForBorder(aForFrame, frameRect, skipSides); + + // Explicitly do not need to account for the spread radius here + // Webrender does it for us or PaintBoxShadow will for non-WR + return frameRect; +} + void nsCSSRendering::PaintBoxShadowOuter(nsPresContext* aPresContext, nsRenderingContext& aRenderingContext, @@ -1383,25 +1433,11 @@ nsCSSRendering::PaintBoxShadowOuter(nsPresContext* aPresContext, return; bool hasBorderRadius; - bool nativeTheme; // mutually exclusive with hasBorderRadius + // mutually exclusive with hasBorderRadius + bool nativeTheme = HasBoxShadowNativeTheme(aForFrame, hasBorderRadius); const nsStyleDisplay* styleDisplay = aForFrame->StyleDisplay(); - nsITheme::Transparency transparency; - if (aForFrame->IsThemed(styleDisplay, &transparency)) { - // We don't respect border-radius for native-themed widgets - hasBorderRadius = false; - // For opaque (rectangular) theme widgets we can take the generic - // border-box path with border-radius disabled. - nativeTheme = transparency != nsITheme::eOpaque; - } else { - nativeTheme = false; - hasBorderRadius = true; // we'll update this below - } - nsRect frameRect = nativeTheme ? - aForFrame->GetVisualOverflowRectRelativeToSelf() + aFrameArea.TopLeft() : - aFrameArea; - Sides skipSides = aForFrame->GetSkipSides(); - frameRect = ::BoxDecorationRectForBorder(aForFrame, frameRect, skipSides); + nsRect frameRect = GetShadowRect(aFrameArea, nativeTheme, aForFrame); // Get any border radius, since box-shadow must also have rounded corners if // the frame does. @@ -1465,15 +1501,7 @@ nsCSSRendering::PaintBoxShadowOuter(nsPresContext* aPresContext, shadowGfxRectPlusBlur.RoundOut(); MaybeSnapToDevicePixels(shadowGfxRectPlusBlur, aDrawTarget, true); - // Set the shadow color; if not specified, use the foreground color - nscolor shadowColor; - if (shadowItem->mHasColor) - shadowColor = shadowItem->mColor; - else - shadowColor = aForFrame->StyleColor()->mColor; - - Color gfxShadowColor(Color::FromABGR(shadowColor)); - gfxShadowColor.a *= aOpacity; + Color gfxShadowColor = GetShadowColor(shadowItem, aForFrame, aOpacity); if (nativeTheme) { nsContextBoxBlur blurringArea; @@ -1547,6 +1575,7 @@ nsCSSRendering::PaintBoxShadowOuter(nsPresContext* aPresContext, // Clip the shadow so that we only get the part that applies to aForFrame. nsRect fragmentClip = shadowRectPlusBlur; + Sides skipSides = aForFrame->GetSkipSides(); if (!skipSides.IsEmpty()) { if (skipSides.Left()) { nscoord xmost = fragmentClip.XMost(); @@ -1740,11 +1769,7 @@ nsCSSRendering::PaintBoxShadowInner(nsPresContext* aPresContext, Rect shadowGfxRect = NSRectToRect(paddingRect, twipsPerPixel); shadowGfxRect.Round(); - // Set the shadow color; if not specified, use the foreground color - Color shadowColor = Color::FromABGR(shadowItem->mHasColor ? - shadowItem->mColor : - aForFrame->StyleColor()->mColor); - + Color shadowColor = GetShadowColor(shadowItem, aForFrame, 1.0); renderContext->Save(); // This clips the outside border radius. diff --git a/layout/painting/nsCSSRendering.h b/layout/painting/nsCSSRendering.h index 55dc35d8d770..3c8007dae08f 100644 --- a/layout/painting/nsCSSRendering.h +++ b/layout/painting/nsCSSRendering.h @@ -354,6 +354,7 @@ struct nsBackgroundLayerState { }; struct nsCSSRendering { + typedef mozilla::gfx::Color Color; typedef mozilla::gfx::CompositionOp CompositionOp; typedef mozilla::gfx::DrawTarget DrawTarget; typedef mozilla::gfx::Float Float; @@ -379,6 +380,17 @@ struct nsCSSRendering { nsIFrame* aForFrame, const nsRect& aFrameArea); + static nsRect GetShadowRect(const nsRect aFrameArea, + bool aNativeTheme, + nsIFrame* aForFrame); + static mozilla::gfx::Color GetShadowColor(nsCSSShadowItem* aShadow, + nsIFrame* aFrame, + float aOpacity); + // Returns if the frame has a themed frame. + // aMaybeHasBorderRadius will return false if we can early detect + // that we don't have a border radius. + static bool HasBoxShadowNativeTheme(nsIFrame* aFrame, + bool& aMaybeHasBorderRadius); static void PaintBoxShadowOuter(nsPresContext* aPresContext, nsRenderingContext& aRenderingContext, nsIFrame* aForFrame, diff --git a/layout/painting/nsDisplayList.cpp b/layout/painting/nsDisplayList.cpp index 0e131e4471fd..2fb94fd3c660 100644 --- a/layout/painting/nsDisplayList.cpp +++ b/layout/painting/nsDisplayList.cpp @@ -4771,45 +4771,54 @@ nsDisplayBoxShadowOuter::CreateWebRenderCommands(nsTArray& aCo if (!shadows) return; + bool hasBorderRadius; + bool nativeTheme = nsCSSRendering::HasBoxShadowNativeTheme(mFrame, + hasBorderRadius); + // Everything here is in app units, change to device units. for (uint32_t i = 0; i < rects.Length(); ++i) { Rect clipRect = NSRectToRect(rects[i], appUnitsPerDevPixel); - Rect gfxBorderRect = NSRectToRect(borderRect, appUnitsPerDevPixel); + nsCSSShadowArray* shadows = mFrame->StyleEffects()->mBoxShadow; - Rect deviceClipRect = aLayer->RelativeToParent(clipRect); - Rect deviceBoxRect = aLayer->RelativeToParent(gfxBorderRect); + for (uint32_t j = shadows->Length(); j > 0; j--) { + nsCSSShadowItem* shadow = shadows->ShadowAt(j - 1); + // Don't need the full size of the shadow rect like we do in + // nsCSSRendering since WR takes care of calculations for blur + // and spread radius. + nsRect shadowRect = nsCSSRendering::GetShadowRect(borderRect, + nativeTheme, + mFrame); + gfx::Color shadowColor = nsCSSRendering::GetShadowColor(shadow, + mFrame, + mOpacity); + shadowRect.MoveBy(shadow->mXOffset, shadow->mYOffset); - for (uint32_t j = shadows->Length(); j > 0; --j) { - nsCSSShadowItem* shadowItem = shadows->ShadowAt(j - 1); - nscoord blurRadius = shadowItem->mRadius; - float gfxBlurRadius = blurRadius / appUnitsPerDevPixel; + // Now translate everything to device pixels. + Point shadowOffset; + shadowOffset.x = (shadow->mXOffset / appUnitsPerDevPixel); + shadowOffset.y = (shadow->mYOffset / appUnitsPerDevPixel); - // TODO: Have to refactor our nsCSSRendering - // to get the acual rects correct. - nscolor shadowColor; - if (shadowItem->mHasColor) - shadowColor = shadowItem->mColor; - else - shadowColor = mFrame->StyleColor()->mColor; + Rect deviceBoxRect = NSRectToRect(shadowRect, appUnitsPerDevPixel); + deviceBoxRect = aLayer->RelativeToParent(deviceBoxRect); - Color gfxShadowColor(Color::FromABGR(shadowColor)); - gfxShadowColor.a *= mOpacity; + Rect deviceClipRect = aLayer->RelativeToParent(clipRect + shadowOffset); - WrPoint offset; - offset.x = shadowItem->mXOffset; - offset.y = shadowItem->mYOffset; + float blurRadius = shadow->mRadius / appUnitsPerDevPixel; + // TODO: Calculate the border radius here. + float borderRadius = 0.0; + float spreadRadius = shadow->mSpread / appUnitsPerDevPixel; aCommands.AppendElement(OpDPPushBoxShadow( wr::ToWrRect(deviceBoxRect), wr::ToWrRect(deviceClipRect), wr::ToWrRect(deviceBoxRect), - offset, - wr::ToWrColor(gfxShadowColor), - gfxBlurRadius, - 0, - 0, + wr::ToWrPoint(shadowOffset), + wr::ToWrColor(shadowColor), + blurRadius, + spreadRadius, + borderRadius, WrBoxShadowClipMode::Outset - )); + )); } } } From 0a8bfc0f1b9c8d576e99ddc93b0ffde89401a6bb Mon Sep 17 00:00:00 2001 From: sotaro Date: Wed, 22 Feb 2017 10:35:39 +0900 Subject: [PATCH 2/9] Bug 1341192 - Update LayerManager handling in nsWindow::SetSizeConstraints() r=nical --- widget/windows/nsWindow.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/widget/windows/nsWindow.cpp b/widget/windows/nsWindow.cpp index 4ff93382310f..8757b2d74cd3 100644 --- a/widget/windows/nsWindow.cpp +++ b/widget/windows/nsWindow.cpp @@ -204,8 +204,8 @@ #include "mozilla/gfx/DeviceManagerDx.h" #include "mozilla/layers/APZCTreeManager.h" #include "mozilla/layers/InputAPZContext.h" +#include "mozilla/layers/KnowsCompositor.h" #include "mozilla/layers/ScrollInputMethods.h" -#include "ClientLayerManager.h" #include "InputData.h" #include "mozilla/Telemetry.h" @@ -1732,10 +1732,9 @@ nsWindow::SetSizeConstraints(const SizeConstraints& aConstraints) c.mMinSize.width = std::max(int32_t(::GetSystemMetrics(SM_CXMINTRACK)), c.mMinSize.width); c.mMinSize.height = std::max(int32_t(::GetSystemMetrics(SM_CYMINTRACK)), c.mMinSize.height); } - ClientLayerManager *clientLayerManager = GetLayerManager()->AsClientLayerManager(); - - if (clientLayerManager) { - int32_t maxSize = clientLayerManager->GetMaxTextureSize(); + KnowsCompositor* knowsCompositor = GetLayerManager()->AsKnowsCompositor(); + if (knowsCompositor) { + int32_t maxSize = knowsCompositor->GetMaxTextureSize(); // We can't make ThebesLayers bigger than this anyway.. no point it letting // a window grow bigger as we won't be able to draw content there in // general. From c9291524eaca3fb22efa3053ee85675a259d47cb Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Wed, 22 Feb 2017 15:15:05 -0500 Subject: [PATCH 3/9] Bug 1341362 - Use default values for RendererOptions instead of explicitly specifying each one. r=jrmuizel MozReview-Commit-ID: 275n8D1KfOK --- gfx/webrender_bindings/src/bindings.rs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/gfx/webrender_bindings/src/bindings.rs b/gfx/webrender_bindings/src/bindings.rs index 1f6478ea2fba..dbeabb0dc47b 100644 --- a/gfx/webrender_bindings/src/bindings.rs +++ b/gfx/webrender_bindings/src/bindings.rs @@ -189,20 +189,10 @@ pub extern fn wr_window_new(window_id: WrWindowId, println!("WebRender - OpenGL version new {}", version); let opts = RendererOptions { - device_pixel_ratio: 1.0, - resource_override_path: None, enable_aa: false, - enable_subpixel_aa: false, enable_profiler: enable_profiler, - enable_scrollbars: false, - precache_shaders: false, - renderer_kind: RendererKind::Native, - debug: false, - clear_framebuffer: true, - render_target_debug: false, - clear_color: ColorF::new(1.0, 1.0, 1.0, 1.0), recorder: recorder, - workers: None, + .. Default::default() }; let (mut renderer, sender) = match Renderer::new(opts) { From 5d0c587887e71afdc9f7e79baddcd9c43641c7b8 Mon Sep 17 00:00:00 2001 From: sotaro Date: Thu, 23 Feb 2017 10:49:46 +0900 Subject: [PATCH 4/9] Bug 1341163 - Update LayerManager handling PresShell::RenderDocument() r=nical --- layout/base/PresShell.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp index f95badaa36a3..f0210fe11e2f 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -4717,10 +4717,10 @@ PresShell::RenderDocument(const nsRect& aRect, uint32_t aFlags, if (view && view->GetWidget() && nsLayoutUtils::GetDisplayRootFrame(rootFrame) == rootFrame) { LayerManager* layerManager = view->GetWidget()->GetLayerManager(); - // ClientLayerManagers in content processes don't support - // taking snapshots. + // ClientLayerManagers or WebRenderLayerManagers in content processes + // don't support taking snapshots. if (layerManager && - (!layerManager->AsClientLayerManager() || + (!layerManager->AsKnowsCompositor() || XRE_IsParentProcess())) { flags |= PaintFrameFlags::PAINT_WIDGET_LAYERS; } From 90419861cde55c50ba0dbd48dcaa361f388f5bbb Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Wed, 22 Feb 2017 23:07:59 -0500 Subject: [PATCH 5/9] Bug 1340270 - Update webrender and webrender_traits to cset edc74274d28b1fa1229a1d1ea05027f57172b992. r=jrmuizel This also: 1) Updates the webrender_bindings Cargo.toml file to use the latest version numbers of webrender and webrender_traits 2) Updates the webrender_bindings Cargo.toml file to use the same version of other dependencies (euclid, etc.) as webrender itself does 3) Updates the webrender_bindings glue code for API changes in push_border, add_image, and add_raw_font. --HG-- rename : third_party/rust/dwrote/.gitignore => third_party/rust/servo-dwrote/.gitignore rename : third_party/rust/dwrote/README.md => third_party/rust/servo-dwrote/README.md rename : third_party/rust/dwrote/build.rs => third_party/rust/servo-dwrote/build.rs rename : third_party/rust/dwrote/src/bitmap_render_target.rs => third_party/rust/servo-dwrote/src/bitmap_render_target.rs rename : third_party/rust/dwrote/src/com_helpers.rs => third_party/rust/servo-dwrote/src/com_helpers.rs rename : third_party/rust/dwrote/src/comptr.rs => third_party/rust/servo-dwrote/src/comptr.rs rename : third_party/rust/dwrote/src/font.rs => third_party/rust/servo-dwrote/src/font.rs rename : third_party/rust/dwrote/src/font_collection.rs => third_party/rust/servo-dwrote/src/font_collection.rs rename : third_party/rust/dwrote/src/font_face.rs => third_party/rust/servo-dwrote/src/font_face.rs rename : third_party/rust/dwrote/src/font_family.rs => third_party/rust/servo-dwrote/src/font_family.rs rename : third_party/rust/dwrote/src/font_file.rs => third_party/rust/servo-dwrote/src/font_file.rs rename : third_party/rust/dwrote/src/font_file_loader_impl.rs => third_party/rust/servo-dwrote/src/font_file_loader_impl.rs rename : third_party/rust/dwrote/src/gdi_interop.rs => third_party/rust/servo-dwrote/src/gdi_interop.rs rename : third_party/rust/dwrote/src/glyph_run_analysis.rs => third_party/rust/servo-dwrote/src/glyph_run_analysis.rs rename : third_party/rust/dwrote/src/helpers.rs => third_party/rust/servo-dwrote/src/helpers.rs rename : third_party/rust/dwrote/src/rendering_params.rs => third_party/rust/servo-dwrote/src/rendering_params.rs rename : third_party/rust/dwrote/src/test.rs => third_party/rust/servo-dwrote/src/test.rs rename : third_party/rust/dwrote/src/types.rs => third_party/rust/servo-dwrote/src/types.rs --- gfx/doc/README.webrender | 2 +- gfx/webrender/Cargo.toml | 16 +- gfx/webrender/res/cs_text_run.vs.glsl | 2 +- gfx/webrender/res/prim_shared.glsl | 111 +- gfx/webrender/res/ps_border.vs.glsl | 102 +- gfx/webrender/res/ps_box_shadow.vs.glsl | 6 +- gfx/webrender/res/ps_cache_image.vs.glsl | 2 +- gfx/webrender/res/ps_gradient.vs.glsl | 16 +- gfx/webrender/res/ps_text_run.vs.glsl | 5 +- .../src/{layer.rs => clip_scroll_node.rs} | 10 +- .../{scroll_tree.rs => clip_scroll_tree.rs} | 238 +-- gfx/webrender/src/device.rs | 14 +- gfx/webrender/src/frame.rs | 148 +- gfx/webrender/src/frame_builder.rs | 749 +++++++--- gfx/webrender/src/lib.rs | 4 +- gfx/webrender/src/platform/windows/font.rs | 20 +- gfx/webrender/src/prim_store.rs | 26 +- gfx/webrender/src/record.rs | 5 +- gfx/webrender/src/render_backend.rs | 9 +- gfx/webrender/src/render_task.rs | 6 +- gfx/webrender/src/renderer.rs | 55 +- gfx/webrender/src/resource_cache.rs | 154 +- gfx/webrender/src/texture_cache.rs | 63 +- gfx/webrender/src/tiling.rs | 118 +- gfx/webrender_bindings/Cargo.toml | 8 +- gfx/webrender_bindings/src/bindings.rs | 33 +- gfx/webrender_traits/Cargo.toml | 20 +- gfx/webrender_traits/src/api.rs | 26 +- gfx/webrender_traits/src/channel_mpsc.rs | 8 +- gfx/webrender_traits/src/display_item.rs | 44 +- gfx/webrender_traits/src/display_list.rs | 20 +- gfx/webrender_traits/src/types.rs | 98 +- .../rust/app_units-0.3.0/.cargo-checksum.json | 1 - third_party/rust/app_units-0.3.0/.gitignore | 2 - third_party/rust/app_units-0.3.0/.travis.yml | 8 - third_party/rust/app_units-0.3.0/Cargo.toml | 18 - third_party/rust/app_units-0.3.0/README.md | 3 - .../rust/app_units-0.3.0/src/app_unit.rs | 315 ---- third_party/rust/app_units-0.3.0/src/lib.rs | 16 - third_party/rust/bincode/.cargo-checksum.json | 2 +- third_party/rust/bincode/.travis.yml | 34 +- third_party/rust/bincode/Cargo.toml | 20 +- third_party/rust/bincode/changelist.org | 18 + third_party/rust/bincode/examples/basic.rs | 6 +- third_party/rust/bincode/src/lib.rs | 21 +- third_party/rust/bincode/src/refbox.rs | 87 +- .../rust/bincode/src/rustc_serialize/mod.rs | 102 -- .../bincode/src/rustc_serialize/reader.rs | 392 ----- .../bincode/src/rustc_serialize/writer.rs | 422 ------ third_party/rust/bincode/src/serde/mod.rs | 125 +- third_party/rust/bincode/src/serde/reader.rs | 404 ++--- third_party/rust/bincode/src/serde/writer.rs | 785 +++++----- third_party/rust/bincode/tests/test.rs | 262 +--- .../rust/core-graphics/.cargo-checksum.json | 2 +- third_party/rust/core-graphics/Cargo.toml | 4 +- third_party/rust/core-graphics/src/font.rs | 6 +- .../rust/core-text/.cargo-checksum.json | 2 +- third_party/rust/core-text/Cargo.toml | 4 +- third_party/rust/dwrote/.cargo-ok | 0 .../rust/euclid-0.10.5/.cargo-checksum.json | 1 - third_party/rust/euclid-0.10.5/.cargo-ok | 0 third_party/rust/euclid-0.10.5/.gitignore | 2 - third_party/rust/euclid-0.10.5/.travis.yml | 19 - third_party/rust/euclid-0.10.5/COPYRIGHT | 5 - third_party/rust/euclid-0.10.5/Cargo.toml | 22 - third_party/rust/euclid-0.10.5/LICENSE-APACHE | 201 --- third_party/rust/euclid-0.10.5/LICENSE-MIT | 25 - third_party/rust/euclid-0.10.5/README.md | 5 - .../rust/euclid-0.10.5/src/approxeq.rs | 47 - third_party/rust/euclid-0.10.5/src/length.rs | 448 ------ third_party/rust/euclid-0.10.5/src/lib.rs | 110 -- third_party/rust/euclid-0.10.5/src/macros.rs | 86 -- .../rust/euclid-0.10.5/src/matrix2d.rs | 404 ----- .../rust/euclid-0.10.5/src/matrix4d.rs | 797 ---------- third_party/rust/euclid-0.10.5/src/num.rs | 66 - third_party/rust/euclid-0.10.5/src/point.rs | 939 ------------ third_party/rust/euclid-0.10.5/src/rect.rs | 671 --------- .../rust/euclid-0.10.5/src/scale_factor.rs | 171 --- .../rust/euclid-0.10.5/src/side_offsets.rs | 283 ---- third_party/rust/euclid-0.10.5/src/size.rs | 276 ---- third_party/rust/euclid-0.10.5/src/trig.rs | 50 - .../offscreen_gl_context/.cargo-checksum.json | 2 +- .../rust/offscreen_gl_context/Cargo.toml | 7 +- .../src/gl_context_attributes.rs | 4 +- .../offscreen_gl_context/src/gl_formats.rs | 15 +- .../offscreen_gl_context/src/gl_limits.rs | 4 +- .../rust/offscreen_gl_context/src/tests.rs | 5 + .../rust/serde-0.8.23/.cargo-checksum.json | 1 - third_party/rust/serde-0.8.23/.cargo-ok | 0 third_party/rust/serde-0.8.23/Cargo.toml | 25 - third_party/rust/serde-0.8.23/src/bytes.rs | 252 ---- .../serde-0.8.23/src/de/from_primitive.rs | 409 ------ third_party/rust/serde-0.8.23/src/de/impls.rs | 1306 ----------------- third_party/rust/serde-0.8.23/src/de/mod.rs | 830 ----------- third_party/rust/serde-0.8.23/src/de/value.rs | 1067 -------------- third_party/rust/serde-0.8.23/src/error.rs | 44 - third_party/rust/serde-0.8.23/src/iter.rs | 61 - third_party/rust/serde-0.8.23/src/lib.rs | 58 - third_party/rust/serde-0.8.23/src/macros.rs | 179 --- .../rust/serde-0.8.23/src/ser/impls.rs | 725 --------- third_party/rust/serde-0.8.23/src/ser/mod.rs | 412 ------ third_party/rust/serde-0.8.23/src/utils.rs | 72 - .../rust/serde_codegen/.cargo-checksum.json | 2 +- third_party/rust/serde_codegen/Cargo.toml | 5 +- third_party/rust/serde_codegen/src/de.rs | 480 +++--- third_party/rust/serde_codegen/src/lib.rs | 1 - third_party/rust/serde_codegen/src/ser.rs | 60 +- .../.cargo-checksum.json | 2 +- .../.cargo-ok | 0 .../rust/{dwrote => servo-dwrote}/.gitignore | 0 .../rust/{dwrote => servo-dwrote}/Cargo.toml | 12 +- .../rust/{dwrote => servo-dwrote}/README.md | 0 .../rust/{dwrote => servo-dwrote}/build.rs | 0 .../src/bitmap_render_target.rs | 0 .../src/com_helpers.rs | 0 .../{dwrote => servo-dwrote}/src/comptr.rs | 0 .../rust/{dwrote => servo-dwrote}/src/font.rs | 0 .../src/font_collection.rs | 0 .../{dwrote => servo-dwrote}/src/font_face.rs | 0 .../src/font_family.rs | 0 .../{dwrote => servo-dwrote}/src/font_file.rs | 0 .../src/font_file_loader_impl.rs | 0 .../src/gdi_interop.rs | 0 .../src/glyph_run_analysis.rs | 0 .../{dwrote => servo-dwrote}/src/helpers.rs | 0 .../rust/{dwrote => servo-dwrote}/src/lib.rs | 1 - .../src/rendering_params.rs | 0 .../rust/{dwrote => servo-dwrote}/src/test.rs | 0 .../{dwrote => servo-dwrote}/src/types.rs | 0 toolkit/library/gtest/rust/Cargo.lock | 134 +- toolkit/library/rust/Cargo.lock | 134 +- 131 files changed, 2536 insertions(+), 13600 deletions(-) rename gfx/webrender/src/{layer.rs => clip_scroll_node.rs} (98%) rename gfx/webrender/src/{scroll_tree.rs => clip_scroll_tree.rs} (55%) delete mode 100644 third_party/rust/app_units-0.3.0/.cargo-checksum.json delete mode 100644 third_party/rust/app_units-0.3.0/.gitignore delete mode 100644 third_party/rust/app_units-0.3.0/.travis.yml delete mode 100644 third_party/rust/app_units-0.3.0/Cargo.toml delete mode 100644 third_party/rust/app_units-0.3.0/README.md delete mode 100644 third_party/rust/app_units-0.3.0/src/app_unit.rs delete mode 100644 third_party/rust/app_units-0.3.0/src/lib.rs create mode 100644 third_party/rust/bincode/changelist.org delete mode 100644 third_party/rust/bincode/src/rustc_serialize/mod.rs delete mode 100644 third_party/rust/bincode/src/rustc_serialize/reader.rs delete mode 100644 third_party/rust/bincode/src/rustc_serialize/writer.rs delete mode 100644 third_party/rust/dwrote/.cargo-ok delete mode 100644 third_party/rust/euclid-0.10.5/.cargo-checksum.json delete mode 100644 third_party/rust/euclid-0.10.5/.cargo-ok delete mode 100644 third_party/rust/euclid-0.10.5/.gitignore delete mode 100644 third_party/rust/euclid-0.10.5/.travis.yml delete mode 100644 third_party/rust/euclid-0.10.5/COPYRIGHT delete mode 100644 third_party/rust/euclid-0.10.5/Cargo.toml delete mode 100644 third_party/rust/euclid-0.10.5/LICENSE-APACHE delete mode 100644 third_party/rust/euclid-0.10.5/LICENSE-MIT delete mode 100644 third_party/rust/euclid-0.10.5/README.md delete mode 100644 third_party/rust/euclid-0.10.5/src/approxeq.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/length.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/lib.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/macros.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/matrix2d.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/matrix4d.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/num.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/point.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/rect.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/scale_factor.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/side_offsets.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/size.rs delete mode 100644 third_party/rust/euclid-0.10.5/src/trig.rs delete mode 100644 third_party/rust/serde-0.8.23/.cargo-checksum.json delete mode 100644 third_party/rust/serde-0.8.23/.cargo-ok delete mode 100644 third_party/rust/serde-0.8.23/Cargo.toml delete mode 100644 third_party/rust/serde-0.8.23/src/bytes.rs delete mode 100644 third_party/rust/serde-0.8.23/src/de/from_primitive.rs delete mode 100644 third_party/rust/serde-0.8.23/src/de/impls.rs delete mode 100644 third_party/rust/serde-0.8.23/src/de/mod.rs delete mode 100644 third_party/rust/serde-0.8.23/src/de/value.rs delete mode 100644 third_party/rust/serde-0.8.23/src/error.rs delete mode 100644 third_party/rust/serde-0.8.23/src/iter.rs delete mode 100644 third_party/rust/serde-0.8.23/src/lib.rs delete mode 100644 third_party/rust/serde-0.8.23/src/macros.rs delete mode 100644 third_party/rust/serde-0.8.23/src/ser/impls.rs delete mode 100644 third_party/rust/serde-0.8.23/src/ser/mod.rs delete mode 100644 third_party/rust/serde-0.8.23/src/utils.rs rename third_party/rust/{dwrote => servo-dwrote}/.cargo-checksum.json (81%) rename third_party/rust/{app_units-0.3.0 => servo-dwrote}/.cargo-ok (100%) rename third_party/rust/{dwrote => servo-dwrote}/.gitignore (100%) rename third_party/rust/{dwrote => servo-dwrote}/Cargo.toml (73%) rename third_party/rust/{dwrote => servo-dwrote}/README.md (100%) rename third_party/rust/{dwrote => servo-dwrote}/build.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/bitmap_render_target.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/com_helpers.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/comptr.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/font.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/font_collection.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/font_face.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/font_family.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/font_file.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/font_file_loader_impl.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/gdi_interop.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/glyph_run_analysis.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/helpers.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/lib.rs (98%) rename third_party/rust/{dwrote => servo-dwrote}/src/rendering_params.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/test.rs (100%) rename third_party/rust/{dwrote => servo-dwrote}/src/types.rs (100%) diff --git a/gfx/doc/README.webrender b/gfx/doc/README.webrender index e7d58a07236b..96a4cdc85d9a 100644 --- a/gfx/doc/README.webrender +++ b/gfx/doc/README.webrender @@ -79,4 +79,4 @@ to make sure that mozjs_sys also has its Cargo.lock file updated if needed, henc the need to run the cargo update command in js/src as well. Hopefully this will be resolved soon. -Latest Commit: 938b32ca93bf5e878422ac4bafcdd53f8058f880 +Latest Commit: edc74274d28b1fa1229a1d1ea05027f57172b992 diff --git a/gfx/webrender/Cargo.toml b/gfx/webrender/Cargo.toml index 6e4722e990fc..85257576eb8a 100644 --- a/gfx/webrender/Cargo.toml +++ b/gfx/webrender/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "webrender" -version = "0.15.0" +version = "0.19.0" authors = ["Glenn Watson "] license = "MPL-2.0" repository = "https://github.com/servo/webrender" @@ -14,17 +14,17 @@ serde_derive = ["webrender_traits/serde_derive"] profiler = ["thread_profiler/thread_profiler"] [dependencies] -app_units = "0.3" -bincode = "0.6" +app_units = "0.4" +bincode = "1.0.0-alpha2" bit-set = "0.4" byteorder = "1.0" -euclid = "0.10.3" +euclid = "0.11" fnv="1.0" gleam = "0.2.30" lazy_static = "0.2" log = "0.3" num-traits = "0.1.32" -offscreen_gl_context = {version = "0.5", features = ["serde_serialization", "osmesa"]} +offscreen_gl_context = {version = "0.6", features = ["serde", "osmesa"]} time = "0.1" threadpool = "1.3.2" webrender_traits = {path = "../webrender_traits", default-features = false} @@ -39,8 +39,8 @@ angle = {git = "https://github.com/servo/angle", branch = "servo"} freetype = { version = "0.2", default-features = false } [target.'cfg(target_os = "windows")'.dependencies] -dwrote = "0.1.7" +servo-dwrote = "0.2" [target.'cfg(target_os = "macos")'.dependencies] -core-graphics = "0.6.0" -core-text = "3.0" +core-graphics = "0.7.0" +core-text = "4.0" diff --git a/gfx/webrender/res/cs_text_run.vs.glsl b/gfx/webrender/res/cs_text_run.vs.glsl index 07c269e224b0..2e2a2343d734 100644 --- a/gfx/webrender/res/cs_text_run.vs.glsl +++ b/gfx/webrender/res/cs_text_run.vs.glsl @@ -19,7 +19,7 @@ void main(void) { // The render task origin is in device-pixels. Offset that by // the glyph offset, relative to its primitive bounding rect. vec2 size = res.uv_rect.zw - res.uv_rect.xy; - vec2 origin = task.data0.xy + uDevicePixelRatio * (glyph.offset.xy - pg.local_rect.xy); + vec2 origin = task.data0.xy + uDevicePixelRatio * (glyph.offset.xy - pg.local_rect.p0); vec4 local_rect = vec4(origin, size); vec2 texture_size = vec2(textureSize(sColor0, 0)); diff --git a/gfx/webrender/res/prim_shared.glsl b/gfx/webrender/res/prim_shared.glsl index 873e98a6769c..a67b20eedc1c 100644 --- a/gfx/webrender/res/prim_shared.glsl +++ b/gfx/webrender/res/prim_shared.glsl @@ -86,10 +86,53 @@ ivec2 get_fetch_uv_8(int index) { return get_fetch_uv(index, 8); } +struct RectWithSize { + vec2 p0; + vec2 size; +}; + +struct RectWithEndpoint { + vec2 p0; + vec2 p1; +}; + +RectWithEndpoint to_rect_with_endpoint(RectWithSize rect) { + RectWithEndpoint result; + result.p0 = rect.p0; + result.p1 = rect.p0 + rect.size; + + return result; +} + +RectWithSize to_rect_with_size(RectWithEndpoint rect) { + RectWithSize result; + result.p0 = rect.p0; + result.size = rect.p1 - rect.p0; + + return result; +} + +vec2 clamp_rect(vec2 point, RectWithSize rect) { + return clamp(point, rect.p0, rect.p0 + rect.size); +} + +vec2 clamp_rect(vec2 point, RectWithEndpoint rect) { + return clamp(point, rect.p0, rect.p1); +} + +// Clamp 2 points at once. +vec4 clamp_rect(vec4 points, RectWithSize rect) { + return clamp(points, rect.p0.xyxy, rect.p0.xyxy + rect.size.xyxy); +} + +vec4 clamp_rect(vec4 points, RectWithEndpoint rect) { + return clamp(points, rect.p0.xyxy, rect.p1.xyxy); +} + struct Layer { mat4 transform; mat4 inv_transform; - vec4 local_clip_rect; + RectWithSize local_clip_rect; vec4 screen_vertices[4]; }; @@ -114,7 +157,8 @@ Layer fetch_layer(int index) { layer.inv_transform[2] = texelFetchOffset(sLayers, uv0, 0, ivec2(6, 0)); layer.inv_transform[3] = texelFetchOffset(sLayers, uv0, 0, ivec2(7, 0)); - layer.local_clip_rect = texelFetchOffset(sLayers, uv1, 0, ivec2(0, 0)); + vec4 clip_rect = texelFetchOffset(sLayers, uv1, 0, ivec2(0, 0)); + layer.local_clip_rect = RectWithSize(clip_rect.xy, clip_rect.zw); layer.screen_vertices[0] = texelFetchOffset(sLayers, uv1, 0, ivec2(1, 0)); layer.screen_vertices[1] = texelFetchOffset(sLayers, uv1, 0, ivec2(2, 0)); @@ -246,17 +290,17 @@ Glyph fetch_glyph(int index) { return glyph; } -vec4 fetch_instance_geometry(int index) { +RectWithSize fetch_instance_geometry(int index) { ivec2 uv = get_fetch_uv_1(index); vec4 rect = texelFetchOffset(sData16, uv, 0, ivec2(0, 0)); - return rect; + return RectWithSize(rect.xy, rect.zw); } struct PrimitiveGeometry { - vec4 local_rect; - vec4 local_clip_rect; + RectWithSize local_rect; + RectWithSize local_clip_rect; }; PrimitiveGeometry fetch_prim_geometry(int index) { @@ -264,8 +308,10 @@ PrimitiveGeometry fetch_prim_geometry(int index) { ivec2 uv = get_fetch_uv(index, VECS_PER_PRIM_GEOM); - pg.local_rect = texelFetchOffset(sPrimGeometry, uv, 0, ivec2(0, 0)); - pg.local_clip_rect = texelFetchOffset(sPrimGeometry, uv, 0, ivec2(1, 0)); + vec4 local_rect = texelFetchOffset(sPrimGeometry, uv, 0, ivec2(0, 0)); + pg.local_rect = RectWithSize(local_rect.xy, local_rect.zw); + vec4 local_clip_rect = texelFetchOffset(sPrimGeometry, uv, 0, ivec2(1, 0)); + pg.local_clip_rect = RectWithSize(local_clip_rect.xy, local_clip_rect.zw); return pg; } @@ -322,8 +368,8 @@ struct Primitive { Layer layer; ClipArea clip_area; AlphaBatchTask task; - vec4 local_rect; - vec4 local_clip_rect; + RectWithSize local_rect; + RectWithSize local_clip_rect; int prim_index; // when sending multiple primitives of the same type (e.g. border segments) // this index allows the vertex shader to recognize the difference @@ -402,47 +448,28 @@ vec4 get_layer_pos(vec2 pos, Layer layer) { return untransform(pos, n, a, layer.inv_transform); } -vec2 clamp_rect(vec2 point, vec4 rect) { - return clamp(point, rect.xy, rect.xy + rect.zw); -} - -struct Rect { - vec2 p0; - vec2 p1; -}; - struct VertexInfo { - Rect local_rect; + RectWithEndpoint local_rect; vec2 local_pos; vec2 screen_pos; }; -VertexInfo write_vertex(vec4 instance_rect, - vec4 local_clip_rect, +VertexInfo write_vertex(RectWithSize instance_rect, + RectWithSize local_clip_rect, float z, Layer layer, AlphaBatchTask task) { - // Get the min/max local space coords of the rectangle. - vec2 local_p0 = instance_rect.xy; - vec2 local_p1 = instance_rect.xy + instance_rect.zw; - - // Get the min/max coords of the local space clip rect. - vec2 local_clip_p0 = local_clip_rect.xy; - vec2 local_clip_p1 = local_clip_rect.xy + local_clip_rect.zw; - - // Get the min/max coords of the layer clip rect. - vec2 layer_clip_p0 = layer.local_clip_rect.xy; - vec2 layer_clip_p1 = layer.local_clip_rect.xy + layer.local_clip_rect.zw; + RectWithEndpoint local_rect = to_rect_with_endpoint(instance_rect); // Select the corner of the local rect that we are processing. - vec2 local_pos = mix(local_p0, local_p1, aPosition.xy); + vec2 local_pos = mix(local_rect.p0, local_rect.p1, aPosition.xy); // xy = top left corner of the local rect, zw = position of current vertex. - vec4 local_p0_pos = vec4(local_p0, local_pos); + vec4 local_p0_pos = vec4(local_rect.p0, local_pos); // Clamp to the two local clip rects. - local_p0_pos = clamp(local_p0_pos, local_clip_p0.xyxy, local_clip_p1.xyxy); - local_p0_pos = clamp(local_p0_pos, layer_clip_p0.xyxy, layer_clip_p1.xyxy); + local_p0_pos = clamp_rect(local_p0_pos, local_clip_rect); + local_p0_pos = clamp_rect(local_p0_pos, layer.local_clip_rect); // Transform the top corner and current vertex to world space. vec4 world_p0 = layer.transform * vec4(local_p0_pos.xy, 0.0, 1.0); @@ -464,7 +491,7 @@ VertexInfo write_vertex(vec4 instance_rect, gl_Position = uTransform * vec4(final_pos, z, 1.0); - VertexInfo vi = VertexInfo(Rect(local_p0, local_p1), local_p0_pos.zw, device_p0_pos.zw); + VertexInfo vi = VertexInfo(local_rect, local_p0_pos.zw, device_p0_pos.zw); return vi; } @@ -476,13 +503,13 @@ struct TransformVertexInfo { vec4 clipped_local_rect; }; -TransformVertexInfo write_transform_vertex(vec4 instance_rect, - vec4 local_clip_rect, +TransformVertexInfo write_transform_vertex(RectWithSize instance_rect, + RectWithSize local_clip_rect, float z, Layer layer, AlphaBatchTask task) { - vec2 lp0_base = instance_rect.xy; - vec2 lp1_base = instance_rect.xy + instance_rect.zw; + vec2 lp0_base = instance_rect.p0; + vec2 lp1_base = instance_rect.p0 + instance_rect.size; vec2 lp0 = clamp_rect(clamp_rect(lp0_base, local_clip_rect), layer.local_clip_rect); diff --git a/gfx/webrender/res/ps_border.vs.glsl b/gfx/webrender/res/ps_border.vs.glsl index 78f3578e6067..6234945c71b9 100644 --- a/gfx/webrender/res/ps_border.vs.glsl +++ b/gfx/webrender/res/ps_border.vs.glsl @@ -32,29 +32,30 @@ void main(void) { Border border = fetch_border(prim.prim_index); int sub_part = prim.sub_index; - vec2 tl_outer = prim.local_rect.xy; + vec2 tl_outer = prim.local_rect.p0; vec2 tl_inner = tl_outer + vec2(max(border.radii[0].x, border.widths.x), max(border.radii[0].y, border.widths.y)); - vec2 tr_outer = vec2(prim.local_rect.x + prim.local_rect.z, - prim.local_rect.y); + vec2 tr_outer = vec2(prim.local_rect.p0.x + prim.local_rect.size.x, + prim.local_rect.p0.y); vec2 tr_inner = tr_outer + vec2(-max(border.radii[0].z, border.widths.z), max(border.radii[0].w, border.widths.y)); - vec2 br_outer = vec2(prim.local_rect.x + prim.local_rect.z, - prim.local_rect.y + prim.local_rect.w); + vec2 br_outer = vec2(prim.local_rect.p0.x + prim.local_rect.size.x, + prim.local_rect.p0.y + prim.local_rect.size.y); vec2 br_inner = br_outer - vec2(max(border.radii[1].x, border.widths.z), max(border.radii[1].y, border.widths.w)); - vec2 bl_outer = vec2(prim.local_rect.x, - prim.local_rect.y + prim.local_rect.w); + vec2 bl_outer = vec2(prim.local_rect.p0.x, + prim.local_rect.p0.y + prim.local_rect.size.y); vec2 bl_inner = bl_outer + vec2(max(border.radii[1].z, border.widths.x), -max(border.radii[1].w, border.widths.w)); - vec4 segment_rect; + RectWithSize segment_rect; switch (sub_part) { case PST_TOP_LEFT: - segment_rect = vec4(tl_outer, tl_inner - tl_outer); + segment_rect.p0 = tl_outer; + segment_rect.size = tl_inner - tl_outer; vBorderStyle = int(border.style.x); vHorizontalColor = border.colors[BORDER_LEFT]; vVerticalColor = border.colors[BORDER_TOP]; @@ -62,10 +63,8 @@ void main(void) { border.radii[0].xy - border.widths.xy); break; case PST_TOP_RIGHT: - segment_rect = vec4(tr_inner.x, - tr_outer.y, - tr_outer.x - tr_inner.x, - tr_inner.y - tr_outer.y); + segment_rect.p0 = vec2(tr_inner.x, tr_outer.y); + segment_rect.size = vec2(tr_outer.x - tr_inner.x, tr_inner.y - tr_outer.y); vBorderStyle = int(border.style.y); vHorizontalColor = border.colors[BORDER_TOP]; vVerticalColor = border.colors[BORDER_RIGHT]; @@ -73,7 +72,8 @@ void main(void) { border.radii[0].zw - border.widths.zy); break; case PST_BOTTOM_RIGHT: - segment_rect = vec4(br_inner, br_outer - br_inner); + segment_rect.p0 = br_inner; + segment_rect.size = br_outer - br_inner; vBorderStyle = int(border.style.z); vHorizontalColor = border.colors[BORDER_BOTTOM]; vVerticalColor = border.colors[BORDER_RIGHT]; @@ -81,10 +81,8 @@ void main(void) { border.radii[1].xy - border.widths.zw); break; case PST_BOTTOM_LEFT: - segment_rect = vec4(bl_outer.x, - bl_inner.y, - bl_inner.x - bl_outer.x, - bl_outer.y - bl_inner.y); + segment_rect.p0 = vec2(bl_outer.x, bl_inner.y); + segment_rect.size = vec2(bl_inner.x - bl_outer.x, bl_outer.y - bl_inner.y); vBorderStyle = int(border.style.w); vHorizontalColor = border.colors[BORDER_BOTTOM]; vVerticalColor = border.colors[BORDER_LEFT]; @@ -92,40 +90,32 @@ void main(void) { border.radii[1].zw - border.widths.xw); break; case PST_LEFT: - segment_rect = vec4(tl_outer.x, - tl_inner.y, - border.widths.x, - bl_inner.y - tl_inner.y); + segment_rect.p0 = vec2(tl_outer.x, tl_inner.y); + segment_rect.size = vec2(border.widths.x, bl_inner.y - tl_inner.y); vBorderStyle = int(border.style.x); vHorizontalColor = border.colors[BORDER_LEFT]; vVerticalColor = border.colors[BORDER_LEFT]; vRadii = vec4(0.0); break; case PST_RIGHT: - segment_rect = vec4(tr_outer.x - border.widths.z, - tr_inner.y, - border.widths.z, - br_inner.y - tr_inner.y); + segment_rect.p0 = vec2(tr_outer.x - border.widths.z, tr_inner.y); + segment_rect.size = vec2(border.widths.z, br_inner.y - tr_inner.y); vBorderStyle = int(border.style.z); vHorizontalColor = border.colors[BORDER_RIGHT]; vVerticalColor = border.colors[BORDER_RIGHT]; vRadii = vec4(0.0); break; case PST_BOTTOM: - segment_rect = vec4(bl_inner.x, - bl_outer.y - border.widths.w, - br_inner.x - bl_inner.x, - border.widths.w); + segment_rect.p0 = vec2(bl_inner.x, bl_outer.y - border.widths.w); + segment_rect.size = vec2(br_inner.x - bl_inner.x, border.widths.w); vBorderStyle = int(border.style.w); vHorizontalColor = border.colors[BORDER_BOTTOM]; vVerticalColor = border.colors[BORDER_BOTTOM]; vRadii = vec4(0.0); break; case PST_TOP: - segment_rect = vec4(tl_inner.x, - tl_outer.y, - tr_inner.x - tl_inner.x, - border.widths.y); + segment_rect.p0 = vec2(tl_inner.x, tl_outer.y); + segment_rect.size = vec2(tr_inner.x - tl_inner.x, border.widths.y); vBorderStyle = int(border.style.y); vHorizontalColor = border.colors[BORDER_TOP]; vVerticalColor = border.colors[BORDER_TOP]; @@ -152,53 +142,53 @@ void main(void) { vLocalPos = vi.local_pos.xy; // Local space - vLocalRect = prim.local_rect; + vLocalRect = vec4(prim.local_rect.p0, prim.local_rect.size); #endif float x0, y0, x1, y1; switch (sub_part) { // These are the layer tile part PrimitivePart as uploaded by the tiling.rs case PST_TOP_LEFT: - x0 = segment_rect.x; - y0 = segment_rect.y; + x0 = segment_rect.p0.x; + y0 = segment_rect.p0.y; // These are width / heights - x1 = segment_rect.x + segment_rect.z; - y1 = segment_rect.y + segment_rect.w; + x1 = segment_rect.p0.x + segment_rect.size.x; + y1 = segment_rect.p0.y + segment_rect.size.y; // The radius here is the border-radius. This is 0, so vRefPoint will // just be the top left (x,y) corner. vRefPoint = vec2(x0, y0) + vRadii.xy; break; case PST_TOP_RIGHT: - x0 = segment_rect.x + segment_rect.z; - y0 = segment_rect.y; - x1 = segment_rect.x; - y1 = segment_rect.y + segment_rect.w; + x0 = segment_rect.p0.x + segment_rect.size.x; + y0 = segment_rect.p0.y; + x1 = segment_rect.p0.x; + y1 = segment_rect.p0.y + segment_rect.size.y; vRefPoint = vec2(x0, y0) + vec2(-vRadii.x, vRadii.y); break; case PST_BOTTOM_LEFT: - x0 = segment_rect.x; - y0 = segment_rect.y + segment_rect.w; - x1 = segment_rect.x + segment_rect.z; - y1 = segment_rect.y; + x0 = segment_rect.p0.x; + y0 = segment_rect.p0.y + segment_rect.size.y; + x1 = segment_rect.p0.x + segment_rect.size.x; + y1 = segment_rect.p0.y; vRefPoint = vec2(x0, y0) + vec2(vRadii.x, -vRadii.y); break; case PST_BOTTOM_RIGHT: - x0 = segment_rect.x; - y0 = segment_rect.y; - x1 = segment_rect.x + segment_rect.z; - y1 = segment_rect.y + segment_rect.w; + x0 = segment_rect.p0.x; + y0 = segment_rect.p0.y; + x1 = segment_rect.p0.x + segment_rect.size.x; + y1 = segment_rect.p0.y + segment_rect.size.y; vRefPoint = vec2(x1, y1) + vec2(-vRadii.x, -vRadii.y); break; case PST_TOP: case PST_LEFT: case PST_BOTTOM: case PST_RIGHT: - vRefPoint = segment_rect.xy; - x0 = segment_rect.x; - y0 = segment_rect.y; - x1 = segment_rect.x + segment_rect.z; - y1 = segment_rect.y + segment_rect.w; + vRefPoint = segment_rect.p0.xy; + x0 = segment_rect.p0.x; + y0 = segment_rect.p0.y; + x1 = segment_rect.p0.x + segment_rect.size.x; + y1 = segment_rect.p0.y + segment_rect.size.y; break; } diff --git a/gfx/webrender/res/ps_box_shadow.vs.glsl b/gfx/webrender/res/ps_box_shadow.vs.glsl index 84b29ab3afc5..45f7f922486a 100644 --- a/gfx/webrender/res/ps_box_shadow.vs.glsl +++ b/gfx/webrender/res/ps_box_shadow.vs.glsl @@ -6,7 +6,7 @@ void main(void) { Primitive prim = load_primitive(); BoxShadow bs = fetch_boxshadow(prim.prim_index); - vec4 segment_rect = fetch_instance_geometry(prim.sub_index); + RectWithSize segment_rect = fetch_instance_geometry(prim.sub_index); VertexInfo vi = write_vertex(segment_rect, prim.local_clip_rect, @@ -22,8 +22,8 @@ void main(void) { vec2 patch_size_device_pixels = child_task.data0.zw - vec2(2.0); vec2 patch_size = patch_size_device_pixels / uDevicePixelRatio; - vUv.xy = (vi.local_pos - prim.local_rect.xy) / patch_size; - vMirrorPoint = 0.5 * prim.local_rect.zw / patch_size; + vUv.xy = (vi.local_pos - prim.local_rect.p0) / patch_size; + vMirrorPoint = 0.5 * prim.local_rect.size / patch_size; vec2 texture_size = vec2(textureSize(sCache, 0)); vCacheUvRectCoords = vec4(patch_origin, patch_origin + patch_size_device_pixels) / texture_size.xyxy; diff --git a/gfx/webrender/res/ps_cache_image.vs.glsl b/gfx/webrender/res/ps_cache_image.vs.glsl index 35c7b2236d3a..bb5f6ed45aac 100644 --- a/gfx/webrender/res/ps_cache_image.vs.glsl +++ b/gfx/webrender/res/ps_cache_image.vs.glsl @@ -22,7 +22,7 @@ void main(void) { vec2 uv0 = child_task.data0.xy / texture_size; vec2 uv1 = (child_task.data0.xy + child_task.data0.zw) / texture_size; - vec2 f = (vi.local_pos - prim.local_rect.xy) / prim.local_rect.zw; + vec2 f = (vi.local_pos - prim.local_rect.p0) / prim.local_rect.size; vUv.xy = mix(uv0, uv1, f); } diff --git a/gfx/webrender/res/ps_gradient.vs.glsl b/gfx/webrender/res/ps_gradient.vs.glsl index cd94560b30a4..f7a3d096cb0c 100644 --- a/gfx/webrender/res/ps_gradient.vs.glsl +++ b/gfx/webrender/res/ps_gradient.vs.glsl @@ -10,7 +10,7 @@ void main(void) { GradientStop g0 = fetch_gradient_stop(prim.sub_index + 0); GradientStop g1 = fetch_gradient_stop(prim.sub_index + 1); - vec4 segment_rect; + RectWithSize segment_rect; vec2 axis; if (gradient.start_end_point.y == gradient.start_end_point.w) { float x0 = mix(gradient.start_end_point.x, @@ -19,9 +19,8 @@ void main(void) { float x1 = mix(gradient.start_end_point.x, gradient.start_end_point.z, g1.offset.x); - segment_rect.yw = prim.local_rect.yw; - segment_rect.x = x0; - segment_rect.z = x1 - x0; + segment_rect.p0 = vec2(x0, prim.local_rect.p0.y); + segment_rect.size = vec2(x1 - x0, prim.local_rect.size.y); axis = vec2(1.0, 0.0); } else { float y0 = mix(gradient.start_end_point.y, @@ -30,9 +29,8 @@ void main(void) { float y1 = mix(gradient.start_end_point.y, gradient.start_end_point.w, g1.offset.x); - segment_rect.xz = prim.local_rect.xz; - segment_rect.y = y0; - segment_rect.w = y1 - y0; + segment_rect.p0 = vec2(prim.local_rect.p0.x, y0); + segment_rect.size = vec2(prim.local_rect.size.x, y1 - y0); axis = vec2(0.0, 1.0); } @@ -44,7 +42,7 @@ void main(void) { prim.task); vLocalRect = vi.clipped_local_rect; vLocalPos = vi.local_pos; - vec2 f = (vi.local_pos.xy - prim.local_rect.xy) / prim.local_rect.zw; + vec2 f = (vi.local_pos.xy - prim.local_rect.p0) / prim.local_rect.size; #else VertexInfo vi = write_vertex(segment_rect, prim.local_clip_rect, @@ -52,7 +50,7 @@ void main(void) { prim.layer, prim.task); - vec2 f = (vi.local_pos - segment_rect.xy) / segment_rect.zw; + vec2 f = (vi.local_pos - segment_rect.p0) / segment_rect.size; vPos = vi.local_pos; #endif diff --git a/gfx/webrender/res/ps_text_run.vs.glsl b/gfx/webrender/res/ps_text_run.vs.glsl index 9826daa6ae19..0c1fe5f7b451 100644 --- a/gfx/webrender/res/ps_text_run.vs.glsl +++ b/gfx/webrender/res/ps_text_run.vs.glsl @@ -9,7 +9,8 @@ void main(void) { Glyph glyph = fetch_glyph(prim.sub_index); ResourceRect res = fetch_resource_rect(prim.user_data.x); - vec4 local_rect = vec4(glyph.offset.xy, (res.uv_rect.zw - res.uv_rect.xy) / uDevicePixelRatio); + RectWithSize local_rect = RectWithSize(glyph.offset.xy, + (res.uv_rect.zw - res.uv_rect.xy) / uDevicePixelRatio); #ifdef WR_FEATURE_TRANSFORM TransformVertexInfo vi = write_transform_vertex(local_rect, @@ -19,7 +20,7 @@ void main(void) { prim.task); vLocalRect = vi.clipped_local_rect; vLocalPos = vi.local_pos; - vec2 f = (vi.local_pos.xy / vi.local_pos.z - local_rect.xy) / local_rect.zw; + vec2 f = (vi.local_pos.xy / vi.local_pos.z - local_rect.p0) / local_rect.size; #else VertexInfo vi = write_vertex(local_rect, prim.local_clip_rect, diff --git a/gfx/webrender/src/layer.rs b/gfx/webrender/src/clip_scroll_node.rs similarity index 98% rename from gfx/webrender/src/layer.rs rename to gfx/webrender/src/clip_scroll_node.rs index 334595b0e432..2d59346713d2 100644 --- a/gfx/webrender/src/layer.rs +++ b/gfx/webrender/src/clip_scroll_node.rs @@ -19,7 +19,7 @@ const CAN_OVERSCROLL: bool = false; /// Contains scrolling and transform information stacking contexts. #[derive(Clone)] -pub struct Layer { +pub struct ClipScrollNode { /// Manages scrolling offset, overscroll state etc. pub scrolling: ScrollingState, @@ -48,13 +48,13 @@ pub struct Layer { pub children: Vec, } -impl Layer { +impl ClipScrollNode { pub fn new(local_viewport_rect: &LayerRect, content_size: LayerSize, local_transform: &LayerToScrollTransform, pipeline_id: PipelineId) - -> Layer { - Layer { + -> ClipScrollNode { + ClipScrollNode { scrolling: ScrollingState::new(), content_size: content_size, local_viewport_rect: *local_viewport_rect, @@ -244,7 +244,7 @@ impl Layer { } } - pub fn ray_intersects_layer(&self, cursor: &WorldPoint) -> bool { + pub fn ray_intersects_node(&self, cursor: &WorldPoint) -> bool { let inv = self.world_viewport_transform.inverse().unwrap(); let z0 = -10000.0; let z1 = 10000.0; diff --git a/gfx/webrender/src/scroll_tree.rs b/gfx/webrender/src/clip_scroll_tree.rs similarity index 55% rename from gfx/webrender/src/scroll_tree.rs rename to gfx/webrender/src/clip_scroll_tree.rs index e3bece51bec4..b34cf7bcd569 100644 --- a/gfx/webrender/src/scroll_tree.rs +++ b/gfx/webrender/src/clip_scroll_tree.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use fnv::FnvHasher; -use layer::{Layer, ScrollingState}; +use clip_scroll_node::{ClipScrollNode, ScrollingState}; use std::collections::{HashMap, HashSet}; use std::hash::BuildHasherDefault; use webrender_traits::{LayerPoint, LayerRect, LayerSize, LayerToScrollTransform, PipelineId}; @@ -13,25 +13,25 @@ use webrender_traits::{ServoScrollRootId, WorldPoint, as_scroll_parent_rect}; pub type ScrollStates = HashMap>; -pub struct ScrollTree { - pub layers: HashMap>, +pub struct ClipScrollTree { + pub nodes: HashMap>, pub pending_scroll_offsets: HashMap<(PipelineId, ServoScrollRootId), LayerPoint>, - /// The ScrollLayerId of the currently scrolling layer. Used to allow the same - /// layer to scroll even if a touch operation leaves the boundaries of that layer. + /// The ScrollLayerId of the currently scrolling node. Used to allow the same + /// node to scroll even if a touch operation leaves the boundaries of that node. pub current_scroll_layer_id: Option, /// The current reference frame id, used for giving a unique id to all new - /// reference frames. The ScrollTree increments this by one every time a + /// reference frames. The ClipScrollTree increments this by one every time a /// reference frame is created. current_reference_frame_id: usize, - /// The root reference frame, which is the true root of the ScrollTree. Initially - /// this ID is not valid, which is indicated by ```layers``` being empty. + /// The root reference frame, which is the true root of the ClipScrollTree. Initially + /// this ID is not valid, which is indicated by ```node``` being empty. pub root_reference_frame_id: ScrollLayerId, - /// The root scroll layer, which is the first child of the root reference frame. - /// Initially this ID is not valid, which is indicated by ```layers``` being empty. + /// The root scroll node which is the first child of the root reference frame. + /// Initially this ID is not valid, which is indicated by ```nodes``` being empty. pub topmost_scroll_layer_id: ScrollLayerId, /// A set of pipelines which should be discarded the next time this @@ -39,11 +39,11 @@ pub struct ScrollTree { pub pipelines_to_discard: HashSet, } -impl ScrollTree { - pub fn new() -> ScrollTree { +impl ClipScrollTree { + pub fn new() -> ClipScrollTree { let dummy_pipeline = PipelineId(0, 0); - ScrollTree { - layers: HashMap::with_hasher(Default::default()), + ClipScrollTree { + nodes: HashMap::with_hasher(Default::default()), pending_scroll_offsets: HashMap::new(), current_scroll_layer_id: None, root_reference_frame_id: ScrollLayerId::root_reference_frame(dummy_pipeline), @@ -55,15 +55,15 @@ impl ScrollTree { pub fn root_reference_frame_id(&self) -> ScrollLayerId { // TODO(mrobinson): We should eventually make this impossible to misuse. - debug_assert!(!self.layers.is_empty()); - debug_assert!(self.layers.contains_key(&self.root_reference_frame_id)); + debug_assert!(!self.nodes.is_empty()); + debug_assert!(self.nodes.contains_key(&self.root_reference_frame_id)); self.root_reference_frame_id } pub fn topmost_scroll_layer_id(&self) -> ScrollLayerId { // TODO(mrobinson): We should eventually make this impossible to misuse. - debug_assert!(!self.layers.is_empty()); - debug_assert!(self.layers.contains_key(&self.topmost_scroll_layer_id)); + debug_assert!(!self.nodes.is_empty()); + debug_assert!(self.nodes.contains_key(&self.topmost_scroll_layer_id)); self.topmost_scroll_layer_id } @@ -71,41 +71,41 @@ impl ScrollTree { pipeline_id: PipelineId, viewport_size: &LayerSize, content_size: &LayerSize) { - debug_assert!(self.layers.is_empty()); + debug_assert!(self.nodes.is_empty()); let identity = LayerToScrollTransform::identity(); let viewport = LayerRect::new(LayerPoint::zero(), *viewport_size); let root_reference_frame_id = ScrollLayerId::root_reference_frame(pipeline_id); self.root_reference_frame_id = root_reference_frame_id; - let reference_frame = Layer::new(&viewport, viewport.size, &identity, pipeline_id); - self.layers.insert(self.root_reference_frame_id, reference_frame); + let reference_frame = ClipScrollNode::new(&viewport, viewport.size, &identity, pipeline_id); + self.nodes.insert(self.root_reference_frame_id, reference_frame); - let scroll_layer = Layer::new(&viewport, *content_size, &identity, pipeline_id); + let scroll_node = ClipScrollNode::new(&viewport, *content_size, &identity, pipeline_id); let topmost_scroll_layer_id = ScrollLayerId::root_scroll_layer(pipeline_id); self.topmost_scroll_layer_id = topmost_scroll_layer_id; - self.add_layer(scroll_layer, topmost_scroll_layer_id, root_reference_frame_id); + self.add_node(scroll_node, topmost_scroll_layer_id, root_reference_frame_id); } - pub fn collect_layers_bouncing_back(&self) - -> HashSet> { - let mut layers_bouncing_back = HashSet::with_hasher(Default::default()); - for (scroll_layer_id, layer) in self.layers.iter() { - if layer.scrolling.bouncing_back { - layers_bouncing_back.insert(*scroll_layer_id); + pub fn collect_nodes_bouncing_back(&self) + -> HashSet> { + let mut nodes_bouncing_back = HashSet::with_hasher(Default::default()); + for (scroll_layer_id, node) in self.nodes.iter() { + if node.scrolling.bouncing_back { + nodes_bouncing_back.insert(*scroll_layer_id); } } - layers_bouncing_back + nodes_bouncing_back } - fn find_scrolling_layer_at_point_in_layer(&self, - cursor: &WorldPoint, - scroll_layer_id: ScrollLayerId) - -> Option { - self.layers.get(&scroll_layer_id).and_then(|layer| { - for child_layer_id in layer.children.iter().rev() { + fn find_scrolling_node_at_point_in_node(&self, + cursor: &WorldPoint, + scroll_layer_id: ScrollLayerId) + -> Option { + self.nodes.get(&scroll_layer_id).and_then(|node| { + for child_layer_id in node.children.iter().rev() { if let Some(layer_id) = - self.find_scrolling_layer_at_point_in_layer(cursor, *child_layer_id) { + self.find_scrolling_node_at_point_in_node(cursor, *child_layer_id) { return Some(layer_id); } } @@ -114,7 +114,7 @@ impl ScrollTree { return None; } - if layer.ray_intersects_layer(cursor) { + if node.ray_intersects_node(cursor) { Some(scroll_layer_id) } else { None @@ -122,20 +122,20 @@ impl ScrollTree { }) } - pub fn find_scrolling_layer_at_point(&self, cursor: &WorldPoint) -> ScrollLayerId { - self.find_scrolling_layer_at_point_in_layer(cursor, self.root_reference_frame_id()) + pub fn find_scrolling_node_at_point(&self, cursor: &WorldPoint) -> ScrollLayerId { + self.find_scrolling_node_at_point_in_node(cursor, self.root_reference_frame_id()) .unwrap_or(self.topmost_scroll_layer_id()) } - pub fn get_scroll_layer_state(&self) -> Vec { + pub fn get_scroll_node_state(&self) -> Vec { let mut result = vec![]; - for (scroll_layer_id, scroll_layer) in self.layers.iter() { + for (scroll_layer_id, scroll_node) in self.nodes.iter() { match scroll_layer_id.info { ScrollLayerInfo::Scrollable(_, servo_scroll_root_id) => { result.push(ScrollLayerState { - pipeline_id: scroll_layer.pipeline_id, + pipeline_id: scroll_node.pipeline_id, scroll_root_id: servo_scroll_root_id, - scroll_offset: scroll_layer.scrolling.offset, + scroll_offset: scroll_node.scrolling.offset, }) } ScrollLayerInfo::ReferenceFrame(..) => {} @@ -148,9 +148,9 @@ impl ScrollTree { self.current_reference_frame_id = 1; let mut scroll_states = HashMap::with_hasher(Default::default()); - for (layer_id, old_layer) in &mut self.layers.drain() { + for (layer_id, old_node) in &mut self.nodes.drain() { if !self.pipelines_to_discard.contains(&layer_id.pipeline_id) { - scroll_states.insert(layer_id, old_layer.scrolling); + scroll_states.insert(layer_id, old_node.scrolling); } } @@ -158,21 +158,21 @@ impl ScrollTree { scroll_states } - pub fn scroll_layers(&mut self, - origin: LayerPoint, - pipeline_id: PipelineId, - scroll_root_id: ServoScrollRootId) - -> bool { - if self.layers.is_empty() { + pub fn scroll_nodes(&mut self, + origin: LayerPoint, + pipeline_id: PipelineId, + scroll_root_id: ServoScrollRootId) + -> bool { + if self.nodes.is_empty() { self.pending_scroll_offsets.insert((pipeline_id, scroll_root_id), origin); return false; } let origin = LayerPoint::new(origin.x.max(0.0), origin.y.max(0.0)); - let mut scrolled_a_layer = false; - let mut found_layer = false; - for (layer_id, layer) in self.layers.iter_mut() { + let mut scrolled_a_node = false; + let mut found_node = false; + for (layer_id, node) in self.nodes.iter_mut() { if layer_id.pipeline_id != pipeline_id { continue; } @@ -183,15 +183,15 @@ impl ScrollTree { ScrollLayerInfo::Scrollable(..) => {} } - found_layer = true; - scrolled_a_layer |= layer.set_scroll_origin(&origin); + found_node = true; + scrolled_a_node |= node.set_scroll_origin(&origin); } - if !found_layer { + if !found_node { self.pending_scroll_offsets.insert((pipeline_id, scroll_root_id), origin); } - scrolled_a_layer + scrolled_a_node } pub fn scroll(&mut self, @@ -199,24 +199,24 @@ impl ScrollTree { cursor: WorldPoint, phase: ScrollEventPhase) -> bool { - if self.layers.is_empty() { + if self.nodes.is_empty() { return false; } let scroll_layer_id = match ( phase, - self.find_scrolling_layer_at_point(&cursor), + self.find_scrolling_node_at_point(&cursor), self.current_scroll_layer_id) { - (ScrollEventPhase::Start, scroll_layer_at_point_id, _) => { - self.current_scroll_layer_id = Some(scroll_layer_at_point_id); - scroll_layer_at_point_id + (ScrollEventPhase::Start, scroll_node_at_point_id, _) => { + self.current_scroll_layer_id = Some(scroll_node_at_point_id); + scroll_node_at_point_id }, - (_, scroll_layer_at_point_id, Some(cached_scroll_layer_id)) => { - let scroll_layer_id = match self.layers.get(&cached_scroll_layer_id) { + (_, scroll_node_at_point_id, Some(cached_scroll_layer_id)) => { + let scroll_layer_id = match self.nodes.get(&cached_scroll_layer_id) { Some(_) => cached_scroll_layer_id, None => { - self.current_scroll_layer_id = Some(scroll_layer_at_point_id); - scroll_layer_at_point_id + self.current_scroll_layer_id = Some(scroll_node_at_point_id); + scroll_node_at_point_id }, }; scroll_layer_id @@ -226,52 +226,52 @@ impl ScrollTree { let topmost_scroll_layer_id = self.topmost_scroll_layer_id(); let non_root_overscroll = if scroll_layer_id != topmost_scroll_layer_id { - // true if the current layer is overscrolling, - // and it is not the root scroll layer. - let child_layer = self.layers.get(&scroll_layer_id).unwrap(); - let overscroll_amount = child_layer.overscroll_amount(); + // true if the current node is overscrolling, + // and it is not the root scroll node. + let child_node = self.nodes.get(&scroll_layer_id).unwrap(); + let overscroll_amount = child_node.overscroll_amount(); overscroll_amount.width != 0.0 || overscroll_amount.height != 0.0 } else { false }; - let switch_layer = match phase { + let switch_node = match phase { ScrollEventPhase::Start => { - // if this is a new gesture, we do not switch layer, + // if this is a new gesture, we do not switch node, // however we do save the state of non_root_overscroll, // for use in the subsequent Move phase. - let mut current_layer = self.layers.get_mut(&scroll_layer_id).unwrap(); - current_layer.scrolling.should_handoff_scroll = non_root_overscroll; + let mut current_node = self.nodes.get_mut(&scroll_layer_id).unwrap(); + current_node.scrolling.should_handoff_scroll = non_root_overscroll; false }, ScrollEventPhase::Move(_) => { - // Switch layer if movement originated in a new gesture, - // from a non root layer in overscroll. - let current_layer = self.layers.get_mut(&scroll_layer_id).unwrap(); - current_layer.scrolling.should_handoff_scroll && non_root_overscroll + // Switch node if movement originated in a new gesture, + // from a non root node in overscroll. + let current_node = self.nodes.get_mut(&scroll_layer_id).unwrap(); + current_node.scrolling.should_handoff_scroll && non_root_overscroll }, ScrollEventPhase::End => { // clean-up when gesture ends. - let mut current_layer = self.layers.get_mut(&scroll_layer_id).unwrap(); - current_layer.scrolling.should_handoff_scroll = false; + let mut current_node = self.nodes.get_mut(&scroll_layer_id).unwrap(); + current_node.scrolling.should_handoff_scroll = false; false }, }; - let scroll_layer_info = if switch_layer { + let scroll_node_info = if switch_node { topmost_scroll_layer_id.info } else { scroll_layer_id.info }; - let scroll_root_id = match scroll_layer_info { + let scroll_root_id = match scroll_node_info { ScrollLayerInfo::Scrollable(_, scroll_root_id) => scroll_root_id, _ => unreachable!("Tried to scroll a reference frame."), }; - let mut scrolled_a_layer = false; - for (layer_id, layer) in self.layers.iter_mut() { + let mut scrolled_a_node = false; + for (layer_id, node) in self.nodes.iter_mut() { if layer_id.pipeline_id != scroll_layer_id.pipeline_id { continue; } @@ -282,66 +282,66 @@ impl ScrollTree { _ => {} } - let scrolled_this_layer = layer.scroll(scroll_location, phase); - scrolled_a_layer = scrolled_a_layer || scrolled_this_layer; + let scrolled_this_node = node.scroll(scroll_location, phase); + scrolled_a_node = scrolled_a_node || scrolled_this_node; } - scrolled_a_layer + scrolled_a_node } - pub fn update_all_layer_transforms(&mut self) { - if self.layers.is_empty() { + pub fn update_all_node_transforms(&mut self) { + if self.nodes.is_empty() { return; } let root_reference_frame_id = self.root_reference_frame_id(); - let root_viewport = self.layers[&root_reference_frame_id].local_viewport_rect; - self.update_layer_transform(root_reference_frame_id, + let root_viewport = self.nodes[&root_reference_frame_id].local_viewport_rect; + self.update_node_transform(root_reference_frame_id, &ScrollToWorldTransform::identity(), &as_scroll_parent_rect(&root_viewport)); } - fn update_layer_transform(&mut self, - layer_id: ScrollLayerId, - parent_world_transform: &ScrollToWorldTransform, - parent_viewport_rect: &ScrollLayerRect) { + fn update_node_transform(&mut self, + layer_id: ScrollLayerId, + parent_world_transform: &ScrollToWorldTransform, + parent_viewport_rect: &ScrollLayerRect) { // TODO(gw): This is an ugly borrow check workaround to clone these. // Restructure this to avoid the clones! - let (layer_transform_for_children, viewport_rect, layer_children) = { - match self.layers.get_mut(&layer_id) { - Some(layer) => { - layer.update_transform(parent_world_transform, parent_viewport_rect); + let (node_transform_for_children, viewport_rect, node_children) = { + match self.nodes.get_mut(&layer_id) { + Some(node) => { + node.update_transform(parent_world_transform, parent_viewport_rect); - (layer.world_content_transform.with_source::(), - as_scroll_parent_rect(&layer.combined_local_viewport_rect), - layer.children.clone()) + (node.world_content_transform.with_source::(), + as_scroll_parent_rect(&node.combined_local_viewport_rect), + node.children.clone()) } None => return, } }; - for child_layer_id in layer_children { - self.update_layer_transform(child_layer_id, - &layer_transform_for_children, - &viewport_rect); + for child_layer_id in node_children { + self.update_node_transform(child_layer_id, + &node_transform_for_children, + &viewport_rect); } } pub fn tick_scrolling_bounce_animations(&mut self) { - for (_, layer) in &mut self.layers { - layer.tick_scrolling_bounce_animation() + for (_, node) in &mut self.nodes { + node.tick_scrolling_bounce_animation() } } pub fn finalize_and_apply_pending_scroll_offsets(&mut self, old_states: ScrollStates) { // TODO(gw): These are all independent - can be run through thread pool if it shows up // in the profile! - for (scroll_layer_id, layer) in &mut self.layers { + for (scroll_layer_id, node) in &mut self.nodes { let scrolling_state = match old_states.get(&scroll_layer_id) { Some(old_scrolling_state) => *old_scrolling_state, None => ScrollingState::new(), }; - layer.finalize(&scrolling_state); + node.finalize(&scrolling_state); let scroll_root_id = match scroll_layer_id.info { ScrollLayerInfo::Scrollable(_, scroll_root_id) => scroll_root_id, @@ -352,7 +352,7 @@ impl ScrollTree { let pipeline_id = scroll_layer_id.pipeline_id; if let Some(pending_offset) = self.pending_scroll_offsets.remove(&(pipeline_id, scroll_root_id)) { - layer.set_scroll_origin(&pending_offset); + node.set_scroll_origin(&pending_offset); } } @@ -369,17 +369,17 @@ impl ScrollTree { }; self.current_reference_frame_id += 1; - let layer = Layer::new(&rect, rect.size, &transform, pipeline_id); - self.add_layer(layer, reference_frame_id, parent_id); + let node = ClipScrollNode::new(&rect, rect.size, &transform, pipeline_id); + self.add_node(node, reference_frame_id, parent_id); reference_frame_id } - pub fn add_layer(&mut self, layer: Layer, id: ScrollLayerId, parent_id: ScrollLayerId) { - debug_assert!(!self.layers.contains_key(&id)); - self.layers.insert(id, layer); + pub fn add_node(&mut self, node: ClipScrollNode, id: ScrollLayerId, parent_id: ScrollLayerId) { + debug_assert!(!self.nodes.contains_key(&id)); + self.nodes.insert(id, node); debug_assert!(parent_id != id); - self.layers.get_mut(&parent_id).unwrap().add_child(id); + self.nodes.get_mut(&parent_id).unwrap().add_child(id); } pub fn discard_frame_state_for_pipeline(&mut self, pipeline_id: PipelineId) { diff --git a/gfx/webrender/src/device.rs b/gfx/webrender/src/device.rs index 1ef3d7aee8ea..5162d393022e 100644 --- a/gfx/webrender/src/device.rs +++ b/gfx/webrender/src/device.rs @@ -42,12 +42,6 @@ const SHADER_VERSION: &'static str = "#version 300 es\n"; static SHADER_PREAMBLE: &'static str = "shared"; -lazy_static! { - pub static ref MAX_TEXTURE_SIZE: gl::GLint = { - gl::get_integer_v(gl::MAX_TEXTURE_SIZE) - }; -} - #[repr(u32)] pub enum DepthFunction { Less = gl::LESS, @@ -825,6 +819,8 @@ pub struct Device { // Used on android only #[allow(dead_code)] next_vao_id: gl::GLuint, + + max_texture_size: u32, } impl Device { @@ -863,9 +859,15 @@ impl Device { next_vao_id: 1, //file_watcher: file_watcher, + + max_texture_size: gl::get_integer_v(gl::MAX_TEXTURE_SIZE) as u32 } } + pub fn max_texture_size(&self) -> u32 { + self.max_texture_size + } + pub fn get_capabilities(&self) -> &Capabilities { &self.capabilities } diff --git a/gfx/webrender/src/frame.rs b/gfx/webrender/src/frame.rs index 63911a3d680b..13c6269f50da 100644 --- a/gfx/webrender/src/frame.rs +++ b/gfx/webrender/src/frame.rs @@ -8,10 +8,10 @@ use internal_types::{ANGLE_FLOAT_TO_FIXED, AxisDirection}; use internal_types::{LowLevelFilterOp}; use internal_types::{RendererFrame}; use frame_builder::{FrameBuilder, FrameBuilderConfig}; -use layer::Layer; +use clip_scroll_node::ClipScrollNode; use resource_cache::ResourceCache; use scene::{Scene, SceneProperties}; -use scroll_tree::{ScrollTree, ScrollStates}; +use clip_scroll_tree::{ClipScrollTree, ScrollStates}; use std::collections::HashMap; use std::hash::BuildHasherDefault; use tiling::{AuxiliaryListsMap, CompositeOps, PrimitiveFlags}; @@ -33,7 +33,7 @@ struct FlattenContext<'a> { // TODO: doc pub struct Frame { - pub scroll_tree: ScrollTree, + pub clip_scroll_tree: ClipScrollTree, pub pipeline_epoch_map: HashMap>, pub pipeline_auxiliary_lists: AuxiliaryListsMap, id: FrameId, @@ -180,7 +180,7 @@ impl Frame { Frame { pipeline_epoch_map: HashMap::with_hasher(Default::default()), pipeline_auxiliary_lists: HashMap::with_hasher(Default::default()), - scroll_tree: ScrollTree::new(), + clip_scroll_tree: ClipScrollTree::new(), id: FrameId(0), frame_builder: None, frame_builder_config: config, @@ -193,37 +193,37 @@ impl Frame { // Advance to the next frame. self.id.0 += 1; - self.scroll_tree.drain() + self.clip_scroll_tree.drain() } - pub fn get_scroll_layer_state(&self) -> Vec { - self.scroll_tree.get_scroll_layer_state() + pub fn get_scroll_node_state(&self) -> Vec { + self.clip_scroll_tree.get_scroll_node_state() } - /// Returns true if any layers actually changed position or false otherwise. - pub fn scroll_layers(&mut self, - origin: LayerPoint, - pipeline_id: PipelineId, - scroll_root_id: ServoScrollRootId) - -> bool { - self.scroll_tree.scroll_layers(origin, pipeline_id, scroll_root_id) + /// Returns true if any nodes actually changed position or false otherwise. + pub fn scroll_nodes(&mut self, + origin: LayerPoint, + pipeline_id: PipelineId, + scroll_root_id: ServoScrollRootId) + -> bool { + self.clip_scroll_tree.scroll_nodes(origin, pipeline_id, scroll_root_id) } - /// Returns true if any layers actually changed position or false otherwise. + /// Returns true if any nodes actually changed position or false otherwise. pub fn scroll(&mut self, scroll_location: ScrollLocation, cursor: WorldPoint, phase: ScrollEventPhase) -> bool { - self.scroll_tree.scroll(scroll_location, cursor, phase,) + self.clip_scroll_tree.scroll(scroll_location, cursor, phase,) } pub fn tick_scrolling_bounce_animations(&mut self) { - self.scroll_tree.tick_scrolling_bounce_animations(); + self.clip_scroll_tree.tick_scrolling_bounce_animations(); } pub fn discard_frame_state_for_pipeline(&mut self, pipeline_id: PipelineId) { - self.scroll_tree.discard_frame_state_for_pipeline(pipeline_id); + self.clip_scroll_tree.discard_frame_state_for_pipeline(pipeline_id); } pub fn create(&mut self, scene: &Scene) { @@ -256,9 +256,9 @@ impl Frame { } }; - self.scroll_tree.establish_root(root_pipeline_id, - &root_pipeline.viewport_size, - &root_clip.main.size); + self.clip_scroll_tree.establish_root(root_pipeline_id, + &root_pipeline.viewport_size, + &root_clip.main.size); let background_color = root_pipeline.background_color.and_then(|color| { if color.a > 0.0 { @@ -279,20 +279,20 @@ impl Frame { }; let mut traversal = DisplayListTraversal::new_skipping_first(display_list); - let reference_frame_id = self.scroll_tree.root_reference_frame_id(); - let topmost_scroll_layer_id = self.scroll_tree.topmost_scroll_layer_id(); + let reference_frame_id = self.clip_scroll_tree.root_reference_frame_id(); + let topmost_scroll_layer_id = self.clip_scroll_tree.topmost_scroll_layer_id(); debug_assert!(reference_frame_id != topmost_scroll_layer_id); let viewport_rect = LayerRect::new(LayerPoint::zero(), root_pipeline.viewport_size); let clip = ClipRegion::simple(&viewport_rect); - context.builder.push_scroll_layer(reference_frame_id, - &clip, - &LayerPoint::zero(), - &root_pipeline.viewport_size); - context.builder.push_scroll_layer(topmost_scroll_layer_id, - &clip, - &LayerPoint::zero(), - &root_clip.main.size); + context.builder.push_clip_scroll_node(reference_frame_id, + &clip, + &LayerPoint::zero(), + &root_pipeline.viewport_size); + context.builder.push_clip_scroll_node(topmost_scroll_layer_id, + &clip, + &LayerPoint::zero(), + &root_clip.main.size); self.flatten_stacking_context(&mut traversal, root_pipeline_id, @@ -304,12 +304,12 @@ impl Frame { &root_stacking_context, root_clip); - context.builder.pop_scroll_layer(); - context.builder.pop_scroll_layer(); + context.builder.pop_clip_scroll_node(); + context.builder.pop_clip_scroll_node(); } self.frame_builder = Some(frame_builder); - self.scroll_tree.finalize_and_apply_pending_scroll_offsets(old_scrolling_states); + self.clip_scroll_tree.finalize_and_apply_pending_scroll_offsets(old_scrolling_states); } fn flatten_scroll_layer<'a>(&mut self, @@ -330,12 +330,15 @@ impl Frame { } let clip_rect = clip.main; - let layer = Layer::new(&clip_rect, *content_size, &layer_relative_transform, pipeline_id); - self.scroll_tree.add_layer(layer, new_scroll_layer_id, parent_scroll_layer_id); - context.builder.push_scroll_layer(new_scroll_layer_id, - clip, - &clip_rect.origin, - &content_size); + let node = ClipScrollNode::new(&clip_rect, + *content_size, + &layer_relative_transform, + pipeline_id); + self.clip_scroll_tree.add_node(node, new_scroll_layer_id, parent_scroll_layer_id); + context.builder.push_clip_scroll_node(new_scroll_layer_id, + clip, + &clip_rect.origin, + &content_size); self.flatten_items(traversal, pipeline_id, @@ -345,7 +348,7 @@ impl Frame { LayerToScrollTransform::identity(), level); - context.builder.pop_scroll_layer(); + context.builder.pop_clip_scroll_node(); } fn flatten_stacking_context<'a>(&mut self, @@ -399,10 +402,10 @@ impl Frame { // that fixed position stacking contexts are positioned relative to us. if stacking_context_transform != LayoutTransform::identity() || stacking_context.perspective != LayoutTransform::identity() { - scroll_layer_id = self.scroll_tree.add_reference_frame(clip_region.main, - transform, - pipeline_id, - scroll_layer_id); + scroll_layer_id = self.clip_scroll_tree.add_reference_frame(clip_region.main, + transform, + pipeline_id, + scroll_layer_id); reference_frame_id = scroll_layer_id; transform = LayerToScrollTransform::identity(); } @@ -420,7 +423,7 @@ impl Frame { CompositeOps::empty()); //Note: we don't use the original clip region here, - // it's already processed by the layer we just pushed. + // it's already processed by the node we just pushed. context.builder.add_solid_rectangle(&clip_region.main, &no_clip, &bg_color, @@ -452,7 +455,7 @@ impl Frame { &scrollbar_rect, &ClipRegion::simple(&scrollbar_rect), &DEFAULT_SCROLLBAR_COLOR, - PrimitiveFlags::Scrollbar(self.scroll_tree.topmost_scroll_layer_id, 4.0)); + PrimitiveFlags::Scrollbar(self.clip_scroll_tree.topmost_scroll_layer_id(), 4.0)); } context.builder.pop_stacking_context(); @@ -491,27 +494,27 @@ impl Frame { bounds.origin.y, 0.0); let iframe_reference_frame_id = - self.scroll_tree.add_reference_frame(iframe_rect, - transform, - pipeline_id, - current_scroll_layer_id); + self.clip_scroll_tree.add_reference_frame(iframe_rect, + transform, + pipeline_id, + current_scroll_layer_id); let iframe_scroll_layer_id = ScrollLayerId::root_scroll_layer(pipeline_id); - let layer = Layer::new(&LayerRect::new(LayerPoint::zero(), iframe_rect.size), - iframe_clip.main.size, - &LayerToScrollTransform::identity(), - pipeline_id); - self.scroll_tree.add_layer(layer.clone(), - iframe_scroll_layer_id, - iframe_reference_frame_id); + let node = ClipScrollNode::new(&LayerRect::new(LayerPoint::zero(), iframe_rect.size), + iframe_clip.main.size, + &LayerToScrollTransform::identity(), + pipeline_id); + self.clip_scroll_tree.add_node(node.clone(), + iframe_scroll_layer_id, + iframe_reference_frame_id); - context.builder.push_scroll_layer(iframe_reference_frame_id, - iframe_clip, - &LayerPoint::zero(), - &iframe_rect.size); - context.builder.push_scroll_layer(iframe_scroll_layer_id, - iframe_clip, - &LayerPoint::zero(), - &iframe_clip.main.size); + context.builder.push_clip_scroll_node(iframe_reference_frame_id, + iframe_clip, + &LayerPoint::zero(), + &iframe_rect.size); + context.builder.push_clip_scroll_node(iframe_scroll_layer_id, + iframe_clip, + &LayerPoint::zero(), + &iframe_clip.main.size); let mut traversal = DisplayListTraversal::new_skipping_first(display_list); @@ -525,8 +528,8 @@ impl Frame { &iframe_stacking_context, iframe_clip); - context.builder.pop_scroll_layer(); - context.builder.pop_scroll_layer(); + context.builder.pop_clip_scroll_node(); + context.builder.pop_clip_scroll_node(); } fn flatten_items<'a>(&mut self, @@ -548,6 +551,7 @@ impl Frame { &item.clip, &info.stretch_size, &info.tile_spacing, + None, info.image_key, info.image_rendering); } @@ -647,7 +651,7 @@ impl Frame { auxiliary_lists_map: &AuxiliaryListsMap, device_pixel_ratio: f32) -> RendererFrame { - self.scroll_tree.update_all_layer_transforms(); + self.clip_scroll_tree.update_all_node_transforms(); let frame = self.build_frame(resource_cache, auxiliary_lists_map, device_pixel_ratio); @@ -663,13 +667,13 @@ impl Frame { let frame = frame_builder.as_mut().map(|builder| builder.build(resource_cache, self.id, - &self.scroll_tree, + &self.clip_scroll_tree, auxiliary_lists_map, device_pixel_ratio) ); self.frame_builder = frame_builder; - let layers_bouncing_back = self.scroll_tree.collect_layers_bouncing_back(); - RendererFrame::new(self.pipeline_epoch_map.clone(), layers_bouncing_back, frame) + let nodes_bouncing_back = self.clip_scroll_tree.collect_nodes_bouncing_back(); + RendererFrame::new(self.pipeline_epoch_map.clone(), nodes_bouncing_back, frame) } } diff --git a/gfx/webrender/src/frame_builder.rs b/gfx/webrender/src/frame_builder.rs index a6bf8ef97edc..14873482afbe 100644 --- a/gfx/webrender/src/frame_builder.rs +++ b/gfx/webrender/src/frame_builder.rs @@ -13,25 +13,73 @@ use prim_store::{GradientPrimitiveCpu, GradientPrimitiveGpu, ImagePrimitiveCpu, use prim_store::{ImagePrimitiveKind, PrimitiveContainer, PrimitiveGeometry, PrimitiveIndex}; use prim_store::{PrimitiveStore, RadialGradientPrimitiveCpu, RadialGradientPrimitiveGpu}; use prim_store::{RectanglePrimitive, TextRunPrimitiveCpu, TextRunPrimitiveGpu}; -use prim_store::{YuvImagePrimitiveCpu, YuvImagePrimitiveGpu}; +use prim_store::{TexelRect, YuvImagePrimitiveCpu, YuvImagePrimitiveGpu}; use profiler::FrameProfileCounters; use render_task::{AlphaRenderItem, MaskCacheKey, MaskResult, RenderTask, RenderTaskIndex}; use render_task::RenderTaskLocation; use resource_cache::ResourceCache; -use scroll_tree::ScrollTree; +use clip_scroll_tree::ClipScrollTree; use std::{cmp, f32, i32, mem, usize}; -use tiling::{AuxiliaryListsMap, CompositeOps, Frame, PackedLayer, PackedLayerIndex}; -use tiling::{PrimitiveFlags, PrimitiveRunCmd, RenderPass, RenderTargetContext}; -use tiling::{RenderTaskCollection, ScrollbarPrimitive, ScrollLayer, ScrollLayerIndex}; -use tiling::{StackingContext, StackingContextIndex}; +use tiling::{AuxiliaryListsMap, ClipScrollGroup, ClipScrollGroupIndex, CompositeOps, Frame}; +use tiling::{PackedLayer, PackedLayerIndex, PrimitiveFlags, PrimitiveRunCmd, RenderPass}; +use tiling::{RenderTargetContext, RenderTaskCollection, ScrollbarPrimitive, ScrollLayer}; +use tiling::{ScrollLayerIndex, StackingContext, StackingContextIndex}; use util::{self, pack_as_float, rect_from_points_f, subtract_rect, TransformedRect}; -use util::TransformedRectKind; -use webrender_traits::{as_scroll_parent_rect, BorderDisplayItem, BorderSide, BorderStyle}; +use util::{RectHelpers, TransformedRectKind}; +use webrender_traits::{as_scroll_parent_rect, BorderDetails, BorderDisplayItem, BorderSide, BorderStyle}; use webrender_traits::{BoxShadowClipMode, ClipRegion, ColorF, device_length, DeviceIntPoint}; use webrender_traits::{DeviceIntRect, DeviceIntSize, DeviceUintSize, ExtendMode, FontKey}; use webrender_traits::{FontRenderMode, GlyphOptions, ImageKey, ImageRendering, ItemRange}; use webrender_traits::{LayerPoint, LayerRect, LayerSize, LayerToScrollTransform, PipelineId}; -use webrender_traits::{ScrollLayerId, ScrollLayerPixel, WebGLContextId, YuvColorSpace}; +use webrender_traits::{RepeatMode, ScrollLayerId, ScrollLayerPixel, WebGLContextId, YuvColorSpace}; + +#[derive(Debug, Clone)] +struct ImageBorderSegment { + geom_rect: LayerRect, + sub_rect: TexelRect, + stretch_size: LayerSize, + tile_spacing: LayerSize, +} + +impl ImageBorderSegment { + fn new(rect: LayerRect, + sub_rect: TexelRect, + repeat_horizontal: RepeatMode, + repeat_vertical: RepeatMode) -> ImageBorderSegment { + let tile_spacing = LayerSize::zero(); + + debug_assert!(sub_rect.uv1.x >= sub_rect.uv0.x); + debug_assert!(sub_rect.uv1.y >= sub_rect.uv0.y); + + let image_size = LayerSize::new(sub_rect.uv1.x - sub_rect.uv0.x, + sub_rect.uv1.y - sub_rect.uv0.y); + + let stretch_size_x = match repeat_horizontal { + RepeatMode::Stretch => rect.size.width, + RepeatMode::Repeat => image_size.width, + RepeatMode::Round | RepeatMode::Space => { + println!("Round/Space not supported yet!"); + rect.size.width + } + }; + + let stretch_size_y = match repeat_vertical { + RepeatMode::Stretch => rect.size.height, + RepeatMode::Repeat => image_size.height, + RepeatMode::Round | RepeatMode::Space => { + println!("Round/Space not supported yet!"); + rect.size.height + } + }; + + ImageBorderSegment { + geom_rect: rect, + sub_rect: sub_rect, + stretch_size: LayerSize::new(stretch_size_x, stretch_size_y), + tile_spacing: tile_spacing, + } + } +} #[derive(Clone, Copy)] pub struct FrameBuilderConfig { @@ -62,12 +110,14 @@ pub struct FrameBuilder { stacking_context_store: Vec, scroll_layer_store: Vec, + clip_scroll_group_store: Vec, packed_layers: Vec, scrollbar_prims: Vec, - /// A stack of scroll layers used during building to properly parent new scroll layers. - scroll_layer_stack: Vec, + /// A stack of scroll nodes used during display list processing to properly + /// parent new scroll nodes. + clip_scroll_node_stack: Vec, } impl FrameBuilder { @@ -79,12 +129,13 @@ impl FrameBuilder { background_color: background_color, stacking_context_store: Vec::new(), scroll_layer_store: Vec::new(), + clip_scroll_group_store: Vec::new(), prim_store: PrimitiveStore::new(), cmds: Vec::new(), packed_layers: Vec::new(), scrollbar_prims: Vec::new(), config: config, - scroll_layer_stack: Vec::new(), + clip_scroll_node_stack: Vec::new(), } } @@ -128,6 +179,25 @@ impl FrameBuilder { prim_index } + pub fn create_clip_scroll_group(&mut self, + stacking_context_index: StackingContextIndex, + scroll_layer_id: ScrollLayerId, + pipeline_id: PipelineId) + -> ClipScrollGroupIndex { + let packed_layer_index = PackedLayerIndex(self.packed_layers.len()); + self.packed_layers.push(PackedLayer::empty()); + + self.clip_scroll_group_store.push(ClipScrollGroup { + stacking_context_index: stacking_context_index, + scroll_layer_id: scroll_layer_id, + packed_layer_index: packed_layer_index, + pipeline_id: pipeline_id, + xf_rect: None, + }); + + ClipScrollGroupIndex(self.clip_scroll_group_store.len() - 1) + } + pub fn push_stacking_context(&mut self, rect: LayerRect, transform: LayerToScrollTransform, @@ -135,32 +205,30 @@ impl FrameBuilder { scroll_layer_id: ScrollLayerId, composite_ops: CompositeOps) { let stacking_context_index = StackingContextIndex(self.stacking_context_store.len()); - let packed_layer_index = PackedLayerIndex(self.packed_layers.len()); - - self.stacking_context_store.push(StackingContext { - local_rect: rect, - local_transform: transform, - scroll_layer_id: scroll_layer_id, - pipeline_id: pipeline_id, - xf_rect: None, - composite_ops: composite_ops, - packed_layer_index: packed_layer_index, - }); - self.packed_layers.push(PackedLayer::empty()); + let group_index = self.create_clip_scroll_group(stacking_context_index, + scroll_layer_id, + pipeline_id); + self.stacking_context_store.push(StackingContext::new(pipeline_id, + transform, + rect, + composite_ops, + group_index)); self.cmds.push(PrimitiveRunCmd::PushStackingContext(stacking_context_index)); - } pub fn pop_stacking_context(&mut self) { self.cmds.push(PrimitiveRunCmd::PopStackingContext); } - pub fn push_scroll_layer(&mut self, - scroll_layer_id: ScrollLayerId, - clip_region: &ClipRegion, - iframe_origin: &LayerPoint, - content_size: &LayerSize) { + pub fn push_clip_scroll_node(&mut self, + scroll_layer_id: ScrollLayerId, + clip_region: &ClipRegion, + node_origin: &LayerPoint, + content_size: &LayerSize) { let scroll_layer_index = ScrollLayerIndex(self.scroll_layer_store.len()); + let parent_index = *self.clip_scroll_node_stack.last().unwrap_or(&scroll_layer_index); + self.clip_scroll_node_stack.push(scroll_layer_index); + let packed_layer_index = PackedLayerIndex(self.packed_layers.len()); let clip_source = ClipSource::Region(clip_region.clone()); @@ -168,7 +236,6 @@ impl FrameBuilder { true, // needs an extra clip for the clip rectangle &mut self.prim_store.gpu_data32); - let parent_index = *self.scroll_layer_stack.last().unwrap_or(&scroll_layer_index); self.scroll_layer_store.push(ScrollLayer { scroll_layer_id: scroll_layer_id, parent_index: parent_index, @@ -185,21 +252,20 @@ impl FrameBuilder { // direct children of this stacking context, need to be adjusted by the scroll // offset of this layer. Eventually we should be able to remove this. let rect = LayerRect::new(LayerPoint::zero(), - LayerSize::new(content_size.width + iframe_origin.x, - content_size.height + iframe_origin.y)); + LayerSize::new(content_size.width + node_origin.x, + content_size.height + node_origin.y)); self.push_stacking_context(rect, LayerToScrollTransform::identity(), scroll_layer_id.pipeline_id, scroll_layer_id, CompositeOps::empty()); - self.scroll_layer_stack.push(scroll_layer_index); } - pub fn pop_scroll_layer(&mut self) { + pub fn pop_clip_scroll_node(&mut self) { self.pop_stacking_context(); self.cmds.push(PrimitiveRunCmd::PopScrollLayer); - self.scroll_layer_stack.pop(); + self.clip_scroll_node_stack.pop(); } pub fn add_solid_rectangle(&mut self, @@ -254,118 +320,223 @@ impl FrameBuilder { pub fn add_border(&mut self, rect: LayerRect, clip_region: &ClipRegion, - border: &BorderDisplayItem) { - let radius = &border.radius; - let left = &border.left; - let right = &border.right; - let top = &border.top; - let bottom = &border.bottom; + border_item: &BorderDisplayItem) { + match border_item.details { + BorderDetails::Image(ref border) => { + // Calculate the modified rect as specific by border-image-outset + let origin = LayerPoint::new(rect.origin.x - border.outset.left, + rect.origin.y - border.outset.top); + let size = LayerSize::new(rect.size.width + border.outset.left + border.outset.right, + rect.size.height + border.outset.top + border.outset.bottom); + let rect = LayerRect::new(origin, size); - if !self.supported_style(left) || !self.supported_style(right) || - !self.supported_style(top) || !self.supported_style(bottom) { - println!("Unsupported border style, not rendering border"); - return; - } + // Calculate the local texel coords of the slices. + let px0 = 0; + let px1 = border.patch.slice.left; + let px2 = border.patch.width - border.patch.slice.right; + let px3 = border.patch.width; - // These colors are used during inset/outset scaling. - let left_color = left.border_color(1.0, 2.0/3.0, 0.3, 0.7); - let top_color = top.border_color(1.0, 2.0/3.0, 0.3, 0.7); - let right_color = right.border_color(2.0/3.0, 1.0, 0.7, 0.3); - let bottom_color = bottom.border_color(2.0/3.0, 1.0, 0.7, 0.3); + let py0 = 0; + let py1 = border.patch.slice.top; + let py2 = border.patch.height - border.patch.slice.bottom; + let py3 = border.patch.height; - let tl_outer = LayerPoint::new(rect.origin.x, rect.origin.y); - let tl_inner = tl_outer + LayerPoint::new(radius.top_left.width.max(left.width), - radius.top_left.height.max(top.width)); + let tl_outer = LayerPoint::new(rect.origin.x, rect.origin.y); + let tl_inner = tl_outer + LayerPoint::new(border_item.widths.left, border_item.widths.top); - let tr_outer = LayerPoint::new(rect.origin.x + rect.size.width, rect.origin.y); - let tr_inner = tr_outer + LayerPoint::new(-radius.top_right.width.max(right.width), - radius.top_right.height.max(top.width)); + let tr_outer = LayerPoint::new(rect.origin.x + rect.size.width, rect.origin.y); + let tr_inner = tr_outer + LayerPoint::new(-border_item.widths.right, border_item.widths.top); - let bl_outer = LayerPoint::new(rect.origin.x, rect.origin.y + rect.size.height); - let bl_inner = bl_outer + LayerPoint::new(radius.bottom_left.width.max(left.width), - -radius.bottom_left.height.max(bottom.width)); + let bl_outer = LayerPoint::new(rect.origin.x, rect.origin.y + rect.size.height); + let bl_inner = bl_outer + LayerPoint::new(border_item.widths.left, -border_item.widths.bottom); - let br_outer = LayerPoint::new(rect.origin.x + rect.size.width, - rect.origin.y + rect.size.height); - let br_inner = br_outer - LayerPoint::new(radius.bottom_right.width.max(right.width), - radius.bottom_right.height.max(bottom.width)); + let br_outer = LayerPoint::new(rect.origin.x + rect.size.width, + rect.origin.y + rect.size.height); + let br_inner = br_outer - LayerPoint::new(border_item.widths.right, border_item.widths.bottom); - // The border shader is quite expensive. For simple borders, we can just draw - // the border with a few rectangles. This generally gives better batching, and - // a GPU win in fragment shader time. - // More importantly, the software (OSMesa) implementation we run tests on is - // particularly slow at running our complex border shader, compared to the - // rectangle shader. This has the effect of making some of our tests time - // out more often on CI (the actual cause is simply too many Servo processes and - // threads being run on CI at once). - // TODO(gw): Detect some more simple cases and handle those with simpler shaders too. - // TODO(gw): Consider whether it's only worth doing this for large rectangles (since - // it takes a little more CPU time to handle multiple rectangles compared - // to a single border primitive). - if left.style == BorderStyle::Solid { - let same_color = left_color == top_color && - left_color == right_color && - left_color == bottom_color; - let same_style = left.style == top.style && - left.style == right.style && - left.style == bottom.style; + // Build the list of image segments + let mut segments = vec![ + // Top left + ImageBorderSegment::new(LayerRect::from_floats(tl_outer.x, tl_outer.y, tl_inner.x, tl_inner.y), + TexelRect::new(px0, py0, px1, py1), + RepeatMode::Stretch, + RepeatMode::Stretch), - if same_color && same_style && radius.is_zero() { - let rects = [ - LayerRect::new(rect.origin, - LayerSize::new(rect.size.width, top.width)), - LayerRect::new(LayerPoint::new(tl_outer.x, tl_inner.y), - LayerSize::new(left.width, - rect.size.height - top.width - bottom.width)), - LayerRect::new(tr_inner, - LayerSize::new(right.width, - rect.size.height - top.width - bottom.width)), - LayerRect::new(LayerPoint::new(bl_outer.x, bl_inner.y), - LayerSize::new(rect.size.width, bottom.width)) + // Top right + ImageBorderSegment::new(LayerRect::from_floats(tr_inner.x, tr_outer.y, tr_outer.x, tr_inner.y), + TexelRect::new(px2, py0, px3, py1), + RepeatMode::Stretch, + RepeatMode::Stretch), + + // Bottom right + ImageBorderSegment::new(LayerRect::from_floats(br_inner.x, br_inner.y, br_outer.x, br_outer.y), + TexelRect::new(px2, py2, px3, py3), + RepeatMode::Stretch, + RepeatMode::Stretch), + + // Bottom left + ImageBorderSegment::new(LayerRect::from_floats(bl_outer.x, bl_inner.y, bl_inner.x, bl_outer.y), + TexelRect::new(px0, py2, px1, py3), + RepeatMode::Stretch, + RepeatMode::Stretch), ]; - for rect in &rects { - self.add_solid_rectangle(rect, - clip_region, - &top_color, - PrimitiveFlags::None); + // Add edge segments if valid size. + if px1 < px2 && py1 < py2 { + segments.extend_from_slice(&[ + // Top + ImageBorderSegment::new(LayerRect::from_floats(tl_inner.x, tl_outer.y, tr_inner.x, tl_inner.y), + TexelRect::new(px1, py0, px2, py1), + border.repeat_horizontal, + RepeatMode::Stretch), + + // Bottom + ImageBorderSegment::new(LayerRect::from_floats(bl_inner.x, bl_inner.y, br_inner.x, bl_outer.y), + TexelRect::new(px1, py2, px2, py3), + border.repeat_horizontal, + RepeatMode::Stretch), + + // Left + ImageBorderSegment::new(LayerRect::from_floats(tl_outer.x, tl_inner.y, tl_inner.x, bl_inner.y), + TexelRect::new(px0, py1, px1, py2), + RepeatMode::Stretch, + border.repeat_vertical), + + // Right + ImageBorderSegment::new(LayerRect::from_floats(tr_inner.x, tr_inner.y, br_outer.x, br_inner.y), + TexelRect::new(px2, py1, px3, py2), + RepeatMode::Stretch, + border.repeat_vertical), + ]); } - return; + for segment in segments { + self.add_image(segment.geom_rect, + clip_region, + &segment.stretch_size, + &segment.tile_spacing, + Some(segment.sub_rect), + border.image_key, + ImageRendering::Auto); + } + } + BorderDetails::Normal(ref border) => { + let radius = &border.radius; + let left = &border.left; + let right = &border.right; + let top = &border.top; + let bottom = &border.bottom; + + if !self.supported_style(left) || !self.supported_style(right) || + !self.supported_style(top) || !self.supported_style(bottom) { + println!("Unsupported border style, not rendering border"); + return; + } + + // These colors are used during inset/outset scaling. + let left_color = left.border_color(1.0, 2.0/3.0, 0.3, 0.7); + let top_color = top.border_color(1.0, 2.0/3.0, 0.3, 0.7); + let right_color = right.border_color(2.0/3.0, 1.0, 0.7, 0.3); + let bottom_color = bottom.border_color(2.0/3.0, 1.0, 0.7, 0.3); + + let tl_outer = LayerPoint::new(rect.origin.x, rect.origin.y); + let tl_inner = tl_outer + LayerPoint::new(radius.top_left.width.max(border_item.widths.left), + radius.top_left.height.max(border_item.widths.top)); + + let tr_outer = LayerPoint::new(rect.origin.x + rect.size.width, rect.origin.y); + let tr_inner = tr_outer + LayerPoint::new(-radius.top_right.width.max(border_item.widths.right), + radius.top_right.height.max(border_item.widths.top)); + + let bl_outer = LayerPoint::new(rect.origin.x, rect.origin.y + rect.size.height); + let bl_inner = bl_outer + LayerPoint::new(radius.bottom_left.width.max(border_item.widths.left), + -radius.bottom_left.height.max(border_item.widths.bottom)); + + let br_outer = LayerPoint::new(rect.origin.x + rect.size.width, + rect.origin.y + rect.size.height); + let br_inner = br_outer - LayerPoint::new(radius.bottom_right.width.max(border_item.widths.right), + radius.bottom_right.height.max(border_item.widths.bottom)); + + // The border shader is quite expensive. For simple borders, we can just draw + // the border with a few rectangles. This generally gives better batching, and + // a GPU win in fragment shader time. + // More importantly, the software (OSMesa) implementation we run tests on is + // particularly slow at running our complex border shader, compared to the + // rectangle shader. This has the effect of making some of our tests time + // out more often on CI (the actual cause is simply too many Servo processes and + // threads being run on CI at once). + // TODO(gw): Detect some more simple cases and handle those with simpler shaders too. + // TODO(gw): Consider whether it's only worth doing this for large rectangles (since + // it takes a little more CPU time to handle multiple rectangles compared + // to a single border primitive). + if left.style == BorderStyle::Solid { + let same_color = left_color == top_color && + left_color == right_color && + left_color == bottom_color; + let same_style = left.style == top.style && + left.style == right.style && + left.style == bottom.style; + + if same_color && same_style && radius.is_zero() { + let rects = [ + LayerRect::new(rect.origin, + LayerSize::new(rect.size.width, border_item.widths.top)), + LayerRect::new(LayerPoint::new(tl_outer.x, tl_inner.y), + LayerSize::new(border_item.widths.left, + rect.size.height - border_item.widths.top - border_item.widths.bottom)), + LayerRect::new(tr_inner, + LayerSize::new(border_item.widths.right, + rect.size.height - border_item.widths.top - border_item.widths.bottom)), + LayerRect::new(LayerPoint::new(bl_outer.x, bl_inner.y), + LayerSize::new(rect.size.width, border_item.widths.bottom)) + ]; + + for rect in &rects { + self.add_solid_rectangle(rect, + clip_region, + &top_color, + PrimitiveFlags::None); + } + + return; + } + } + + //Note: while similar to `ComplexClipRegion::get_inner_rect()` in spirit, + // this code is a bit more complex and can not there for be merged. + let inner_rect = rect_from_points_f(tl_inner.x.max(bl_inner.x), + tl_inner.y.max(tr_inner.y), + tr_inner.x.min(br_inner.x), + bl_inner.y.min(br_inner.y)); + + let prim_cpu = BorderPrimitiveCpu { + inner_rect: LayerRect::from_untyped(&inner_rect), + }; + + let prim_gpu = BorderPrimitiveGpu { + colors: [ left_color, top_color, right_color, bottom_color ], + widths: [ border_item.widths.left, + border_item.widths.top, + border_item.widths.right, + border_item.widths.bottom ], + style: [ + pack_as_float(left.style as u32), + pack_as_float(top.style as u32), + pack_as_float(right.style as u32), + pack_as_float(bottom.style as u32), + ], + radii: [ + radius.top_left, + radius.top_right, + radius.bottom_right, + radius.bottom_left, + ], + }; + + self.add_primitive(&rect, + clip_region, + PrimitiveContainer::Border(prim_cpu, prim_gpu)); } } - - //Note: while similar to `ComplexClipRegion::get_inner_rect()` in spirit, - // this code is a bit more complex and can not there for be merged. - let inner_rect = rect_from_points_f(tl_inner.x.max(bl_inner.x), - tl_inner.y.max(tr_inner.y), - tr_inner.x.min(br_inner.x), - bl_inner.y.min(br_inner.y)); - - let prim_cpu = BorderPrimitiveCpu { - inner_rect: LayerRect::from_untyped(&inner_rect), - }; - - let prim_gpu = BorderPrimitiveGpu { - colors: [ left_color, top_color, right_color, bottom_color ], - widths: [ left.width, top.width, right.width, bottom.width ], - style: [ - pack_as_float(left.style as u32), - pack_as_float(top.style as u32), - pack_as_float(right.style as u32), - pack_as_float(bottom.style as u32), - ], - radii: [ - radius.top_left, - radius.top_right, - radius.bottom_right, - radius.bottom_left, - ], - }; - - self.add_primitive(&rect, - clip_region, - PrimitiveContainer::Border(prim_cpu, prim_gpu)); } pub fn add_gradient(&mut self, @@ -541,46 +712,96 @@ impl FrameBuilder { return; } + // The local space box shadow rect. It is the element rect + // translated by the box shadow offset and inflated by the + // box shadow spread. let bs_rect = box_bounds.translate(box_offset) .inflate(spread_radius, spread_radius); + // Get the outer rectangle, based on the blur radius. let outside_edge_size = 2.0 * blur_radius; let inside_edge_size = outside_edge_size.max(border_radius); let edge_size = outside_edge_size + inside_edge_size; let outer_rect = bs_rect.inflate(outside_edge_size, outside_edge_size); - let mut instance_rects = Vec::new(); - let (prim_rect, inverted) = match clip_mode { + + // Box shadows are often used for things like text underline and other + // simple primitives, so we want to draw these simple cases with the + // solid rectangle shader wherever possible, to avoid invoking the + // expensive box-shadow shader. + enum BoxShadowKind { + Simple(Vec), // Can be drawn via simple rectangles only + Shadow(Vec), // Requires the full box-shadow code path + } + + let shadow_kind = match clip_mode { BoxShadowClipMode::Outset | BoxShadowClipMode::None => { - subtract_rect(&outer_rect, box_bounds, &mut instance_rects); - (outer_rect, 0.0) + // For outset shadows, subtracting the element rectangle + // from the outer rectangle gives the rectangles we need + // to draw. In the simple case (no blur radius), we can + // just draw these as solid colors. + let mut rects = Vec::new(); + subtract_rect(&outer_rect, box_bounds, &mut rects); + if edge_size == 0.0 { + BoxShadowKind::Simple(rects) + } else { + BoxShadowKind::Shadow(rects) + } } BoxShadowClipMode::Inset => { - subtract_rect(box_bounds, &bs_rect, &mut instance_rects); - (*box_bounds, 1.0) + // For inset shadows, in the simple case (no blur) we + // can draw the shadow area by subtracting the box + // shadow rect from the element rect (since inset box + // shadows never extend past the element rect). However, + // in the case of an inset box shadow with blur, we + // currently just draw the box shadow over the entire + // rect. The opaque parts of the shadow (past the outside + // edge of the box-shadow) are handled by the shadow + // shader. + // TODO(gw): We should be able to optimize the complex + // inset shadow case to touch fewer pixels. We + // can probably calculate the inner rect that + // can't be affected, and subtract that from + // the element rect? + let mut rects = Vec::new(); + if edge_size == 0.0 { + subtract_rect(box_bounds, &bs_rect, &mut rects); + BoxShadowKind::Simple(rects) + } else { + rects.push(*box_bounds); + BoxShadowKind::Shadow(rects) + } } }; - if edge_size == 0.0 { - for rect in &instance_rects { - self.add_solid_rectangle(rect, - clip_region, - color, - PrimitiveFlags::None) + match shadow_kind { + BoxShadowKind::Simple(rects) => { + for rect in &rects { + self.add_solid_rectangle(rect, + clip_region, + color, + PrimitiveFlags::None) + } } - } else { - let prim_gpu = BoxShadowPrimitiveGpu { - src_rect: *box_bounds, - bs_rect: bs_rect, - color: *color, - blur_radius: blur_radius, - border_radius: border_radius, - edge_size: edge_size, - inverted: inverted, - }; + BoxShadowKind::Shadow(rects) => { + let inverted = match clip_mode { + BoxShadowClipMode::Outset | BoxShadowClipMode::None => 0.0, + BoxShadowClipMode::Inset => 1.0, + }; - self.add_primitive(&prim_rect, - clip_region, - PrimitiveContainer::BoxShadow(prim_gpu, instance_rects)); + let prim_gpu = BoxShadowPrimitiveGpu { + src_rect: *box_bounds, + bs_rect: bs_rect, + color: *color, + blur_radius: blur_radius, + border_radius: border_radius, + edge_size: edge_size, + inverted: inverted, + }; + + self.add_primitive(&outer_rect, + clip_region, + PrimitiveContainer::BoxShadow(prim_gpu, rects)); + } } } @@ -592,6 +813,7 @@ impl FrameBuilder { kind: ImagePrimitiveKind::WebGL(context_id), color_texture_id: SourceTexture::Invalid, resource_address: GpuStoreAddress(0), + sub_rect: None, }; let prim_gpu = ImagePrimitiveGpu { @@ -609,6 +831,7 @@ impl FrameBuilder { clip_region: &ClipRegion, stretch_size: &LayerSize, tile_spacing: &LayerSize, + sub_rect: Option, image_key: ImageKey, image_rendering: ImageRendering) { let prim_cpu = ImagePrimitiveCpu { @@ -617,6 +840,7 @@ impl FrameBuilder { *tile_spacing), color_texture_id: SourceTexture::Invalid, resource_address: GpuStoreAddress(0), + sub_rect: sub_rect, }; let prim_gpu = ImagePrimitiveGpu { @@ -657,7 +881,7 @@ impl FrameBuilder { /// primitives in screen space. fn build_layer_screen_rects_and_cull_layers(&mut self, screen_rect: &DeviceIntRect, - scroll_tree: &ScrollTree, + clip_scroll_tree: &ClipScrollTree, auxiliary_lists_map: &AuxiliaryListsMap, resource_cache: &mut ResourceCache, profile_counters: &mut FrameProfileCounters, @@ -665,21 +889,21 @@ impl FrameBuilder { profile_scope!("cull"); LayerRectCalculationAndCullingPass::create_and_run(self, screen_rect, - scroll_tree, + clip_scroll_tree, auxiliary_lists_map, resource_cache, profile_counters, device_pixel_ratio); } - fn update_scroll_bars(&mut self, scroll_tree: &ScrollTree) { + fn update_scroll_bars(&mut self, clip_scroll_tree: &ClipScrollTree) { let distance_from_edge = 8.0; for scrollbar_prim in &self.scrollbar_prims { let mut geom = (*self.prim_store.gpu_geometry.get(GpuStoreAddress(scrollbar_prim.prim_index.0 as i32))).clone(); - let scroll_layer = &scroll_tree.layers[&scrollbar_prim.scroll_layer_id]; + let clip_scroll_node = &clip_scroll_tree.nodes[&scrollbar_prim.scroll_layer_id]; - let scrollable_distance = scroll_layer.scrollable_height(); + let scrollable_distance = clip_scroll_node.scrollable_height(); if scrollable_distance <= 0.0 { geom.local_clip_rect.size = LayerSize::zero(); @@ -687,20 +911,20 @@ impl FrameBuilder { continue; } - let f = -scroll_layer.scrolling.offset.y / scrollable_distance; + let f = -clip_scroll_node.scrolling.offset.y / scrollable_distance; - let min_y = scroll_layer.local_viewport_rect.origin.y - - scroll_layer.scrolling.offset.y + + let min_y = clip_scroll_node.local_viewport_rect.origin.y - + clip_scroll_node.scrolling.offset.y + distance_from_edge; - let max_y = scroll_layer.local_viewport_rect.origin.y + - scroll_layer.local_viewport_rect.size.height - - scroll_layer.scrolling.offset.y - + let max_y = clip_scroll_node.local_viewport_rect.origin.y + + clip_scroll_node.local_viewport_rect.size.height - + clip_scroll_node.scrolling.offset.y - geom.local_rect.size.height - distance_from_edge; - geom.local_rect.origin.x = scroll_layer.local_viewport_rect.origin.x + - scroll_layer.local_viewport_rect.size.width - + geom.local_rect.origin.x = clip_scroll_node.local_viewport_rect.origin.x + + clip_scroll_node.local_viewport_rect.size.width - geom.local_rect.size.width - distance_from_edge; @@ -736,14 +960,13 @@ impl FrameBuilder { let stacking_context = &self.stacking_context_store[stacking_context_index.0]; sc_stack.push(stacking_context_index); - if !stacking_context.is_visible() { + if !stacking_context.is_visible { continue; } + let stacking_context_rect = &stacking_context.bounding_rect; let composite_count = stacking_context.composite_ops.count(); for _ in 0..composite_count { - let stacking_context_rect = - stacking_context.xf_rect.as_ref().unwrap().bounding_rect; let location = RenderTaskLocation::Dynamic(None, stacking_context_rect.size); let new_task = RenderTask::new_alpha_batch(next_task_index, stacking_context_rect.origin, @@ -757,7 +980,7 @@ impl FrameBuilder { let stacking_context_index = sc_stack.pop().unwrap(); let stacking_context = &self.stacking_context_store[stacking_context_index.0]; - if !stacking_context.is_visible() { + if !stacking_context.is_visible { continue; } @@ -786,10 +1009,9 @@ impl FrameBuilder { current_task = prev_task; } None => { - let stacking_context_rect = - stacking_context.xf_rect.as_ref().unwrap().bounding_rect; let readback_task = - RenderTask::new_readback(stacking_context_index, stacking_context_rect); + RenderTask::new_readback(stacking_context_index, + stacking_context.bounding_rect); let mut prev_task = alpha_task_stack.pop().unwrap(); let item = AlphaRenderItem::Composite(stacking_context_index, @@ -810,10 +1032,15 @@ impl FrameBuilder { let stacking_context_index = *sc_stack.last().unwrap(); let stacking_context = &self.stacking_context_store[stacking_context_index.0]; - if !stacking_context.is_visible() { + if !stacking_context.is_visible { continue; } + let stacking_context_index = *sc_stack.last().unwrap(); + let group_index = + self.stacking_context_store[stacking_context_index.0].clip_scroll_group(); + let clip_scroll_group = &self.clip_scroll_group_store[group_index.0]; + for i in 0..prim_count { let prim_index = PrimitiveIndex(first_prim_index.0 + i); @@ -828,7 +1055,7 @@ impl FrameBuilder { current_task.children.push(clip_task.clone()); } - let transform_kind = stacking_context.xf_rect.as_ref().unwrap().kind; + let transform_kind = clip_scroll_group.xf_rect.as_ref().unwrap().kind; let needs_clipping = prim_metadata.clip_task.is_some(); let needs_blending = transform_kind == TransformedRectKind::Complex || !prim_metadata.is_opaque || @@ -839,9 +1066,7 @@ impl FrameBuilder { } else { &mut current_task.as_alpha_batch().opaque_items }; - items.push(AlphaRenderItem::Primitive(stacking_context_index, - prim_index, - next_z)); + items.push(AlphaRenderItem::Primitive(group_index, prim_index, next_z)); next_z += 1; } } @@ -857,7 +1082,7 @@ impl FrameBuilder { pub fn build(&mut self, resource_cache: &mut ResourceCache, frame_id: FrameId, - scroll_tree: &ScrollTree, + clip_scroll_tree: &ClipScrollTree, auxiliary_lists_map: &AuxiliaryListsMap, device_pixel_ratio: f32) -> Frame { profile_scope!("build"); @@ -881,10 +1106,10 @@ impl FrameBuilder { let cache_size = DeviceUintSize::new(cmp::max(1024, screen_rect.size.width as u32), cmp::max(1024, screen_rect.size.height as u32)); - self.update_scroll_bars(scroll_tree); + self.update_scroll_bars(clip_scroll_tree); self.build_layer_screen_rects_and_cull_layers(&screen_rect, - scroll_tree, + clip_scroll_tree, auxiliary_lists_map, resource_cache, &mut profile_counters, @@ -922,6 +1147,7 @@ impl FrameBuilder { for pass in &mut passes { let ctx = RenderTargetContext { stacking_context_store: &self.stacking_context_store, + clip_scroll_group_store: &self.clip_scroll_group_store, prim_store: &self.prim_store, resource_cache: resource_cache, }; @@ -953,12 +1179,13 @@ impl FrameBuilder { deferred_resolves: deferred_resolves, } } + } struct LayerRectCalculationAndCullingPass<'a> { frame_builder: &'a mut FrameBuilder, screen_rect: &'a DeviceIntRect, - scroll_tree: &'a ScrollTree, + clip_scroll_tree: &'a ClipScrollTree, auxiliary_lists_map: &'a AuxiliaryListsMap, resource_cache: &'a mut ResourceCache, profile_counters: &'a mut FrameProfileCounters, @@ -978,7 +1205,7 @@ struct LayerRectCalculationAndCullingPass<'a> { impl<'a> LayerRectCalculationAndCullingPass<'a> { fn create_and_run(frame_builder: &'a mut FrameBuilder, screen_rect: &'a DeviceIntRect, - scroll_tree: &'a ScrollTree, + clip_scroll_tree: &'a ClipScrollTree, auxiliary_lists_map: &'a AuxiliaryListsMap, resource_cache: &'a mut ResourceCache, profile_counters: &'a mut FrameProfileCounters, @@ -987,7 +1214,7 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { let mut pass = LayerRectCalculationAndCullingPass { frame_builder: frame_builder, screen_rect: screen_rect, - scroll_tree: scroll_tree, + clip_scroll_tree: clip_scroll_tree, auxiliary_lists_map: auxiliary_lists_map, resource_cache: resource_cache, profile_counters: profile_counters, @@ -1001,6 +1228,9 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { } fn run(&mut self) { + self.recalculate_clip_scroll_groups(); + self.compute_stacking_context_visibility(); + let commands = mem::replace(&mut self.frame_builder.cmds, Vec::new()); for cmd in &commands { match cmd { @@ -1010,9 +1240,7 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { self.handle_push_scroll_layer(scroll_layer_index), &PrimitiveRunCmd::PrimitiveRun(prim_index, prim_count) => self.handle_primitive_run(prim_index, prim_count), - &PrimitiveRunCmd::PopStackingContext => { - self.stacking_context_stack.pop(); - } + &PrimitiveRunCmd::PopStackingContext => self.handle_pop_stacking_context(), &PrimitiveRunCmd::PopScrollLayer => self.handle_pop_scroll_layer(), } } @@ -1020,12 +1248,84 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { mem::replace(&mut self.frame_builder.cmds, commands); } + fn recalculate_clip_scroll_groups(&mut self) { + for ref mut group in &mut self.frame_builder.clip_scroll_group_store { + let stacking_context_index = group.stacking_context_index; + let stacking_context = &mut self.frame_builder + .stacking_context_store[stacking_context_index.0]; + + let scroll_tree_layer = &self.clip_scroll_tree.nodes[&group.scroll_layer_id]; + let packed_layer = &mut self.frame_builder.packed_layers[group.packed_layer_index.0]; + packed_layer.transform = scroll_tree_layer.world_content_transform + .with_source::() + .pre_mul(&stacking_context.local_transform); + packed_layer.inv_transform = packed_layer.transform.inverse().unwrap(); + + if !stacking_context.can_contribute_to_scene() { + return; + } + + let inv_layer_transform = stacking_context.local_transform.inverse().unwrap(); + let local_viewport_rect = + as_scroll_parent_rect(&scroll_tree_layer.combined_local_viewport_rect); + let viewport_rect = inv_layer_transform.transform_rect(&local_viewport_rect); + let layer_local_rect = stacking_context.local_rect.intersection(&viewport_rect); + + group.xf_rect = None; + + let layer_local_rect = match layer_local_rect { + Some(layer_local_rect) if !layer_local_rect.is_empty() => layer_local_rect, + _ => continue, + }; + + let layer_xf_rect = TransformedRect::new(&layer_local_rect, + &packed_layer.transform, + self.device_pixel_ratio); + + if layer_xf_rect.bounding_rect.intersects(&self.screen_rect) { + packed_layer.screen_vertices = layer_xf_rect.vertices.clone(); + packed_layer.local_clip_rect = layer_local_rect; + group.xf_rect = Some(layer_xf_rect); + } + } + } + + fn compute_stacking_context_visibility(&mut self) { + for context_index in 0..self.frame_builder.stacking_context_store.len() { + let is_visible = { + let stacking_context = &self.frame_builder.stacking_context_store[context_index]; + stacking_context.clip_scroll_groups.iter().any(|group_index| { + self.frame_builder.clip_scroll_group_store[group_index.0].is_visible() + }) + }; + self.frame_builder.stacking_context_store[context_index].is_visible = is_visible; + } + } + + fn handle_pop_stacking_context(&mut self) { + let stacking_context_index = self.stacking_context_stack.pop().unwrap(); + + let bounding_rect = { + let stacking_context = + &mut self.frame_builder.stacking_context_store[stacking_context_index.0]; + stacking_context.bounding_rect = stacking_context.bounding_rect + .intersection(self.screen_rect) + .unwrap_or(DeviceIntRect::zero()); + stacking_context.bounding_rect.clone() + }; + + if let Some(ref mut parent_index) = self.stacking_context_stack.last_mut() { + let parent = &mut self.frame_builder.stacking_context_store[parent_index.0]; + parent.bounding_rect = parent.bounding_rect.union(&bounding_rect); + } + } + fn handle_push_scroll_layer(&mut self, scroll_layer_index: ScrollLayerIndex) { self.scroll_layer_stack.push(scroll_layer_index); let scroll_layer = &mut self.frame_builder.scroll_layer_store[scroll_layer_index.0]; let packed_layer_index = scroll_layer.packed_layer_index; - let scroll_tree_layer = &self.scroll_tree.layers[&scroll_layer.scroll_layer_id]; + let scroll_tree_layer = &self.clip_scroll_tree.nodes[&scroll_layer.scroll_layer_id]; let packed_layer = &mut self.frame_builder.packed_layers[packed_layer_index.0]; packed_layer.transform = scroll_tree_layer.world_viewport_transform; @@ -1068,36 +1368,14 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { fn handle_push_stacking_context(&mut self, stacking_context_index: StackingContextIndex) { self.stacking_context_stack.push(stacking_context_index); + // Reset bounding rect to zero. We will calculate it as we collect primitives + // from various scroll layers. In handle_pop_stacking_context , we use this to + // calculate the device bounding rect. In the future, we could cache this during + // the initial adding of items for the common case (where there is only a single + // scroll layer for items in a stacking context). let stacking_context = &mut self.frame_builder .stacking_context_store[stacking_context_index.0]; - let packed_layer = &mut self.frame_builder - .packed_layers[stacking_context.packed_layer_index.0]; - let scroll_layer = &self.scroll_tree.layers[&stacking_context.scroll_layer_id]; - packed_layer.transform = scroll_layer.world_content_transform - .with_source::() - .pre_mul(&stacking_context.local_transform); - packed_layer.inv_transform = packed_layer.transform.inverse().unwrap(); - - if !stacking_context.can_contribute_to_scene() { - return; - } - - let inv_layer_transform = stacking_context.local_transform.inverse().unwrap(); - let local_viewport_rect = as_scroll_parent_rect(&scroll_layer.combined_local_viewport_rect); - let viewport_rect = inv_layer_transform.transform_rect(&local_viewport_rect); - let layer_local_rect = stacking_context.local_rect.intersection(&viewport_rect); - - if let Some(layer_local_rect) = layer_local_rect { - let layer_xf_rect = TransformedRect::new(&layer_local_rect, - &packed_layer.transform, - self.device_pixel_ratio); - - if layer_xf_rect.bounding_rect.intersects(&self.screen_rect) { - packed_layer.screen_vertices = layer_xf_rect.vertices.clone(); - packed_layer.local_clip_rect = layer_local_rect; - stacking_context.xf_rect = Some(layer_xf_rect); - } - } + stacking_context.bounding_rect = DeviceIntRect::zero(); } fn rebuild_clip_info_stack_if_necessary(&mut self, mut scroll_layer_index: ScrollLayerIndex) { @@ -1130,18 +1408,28 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { } fn handle_primitive_run(&mut self, prim_index: PrimitiveIndex, prim_count: usize) { + let stacking_context_index = *self.stacking_context_stack.last().unwrap(); + let (packed_layer_index, pipeline_id) = { + let stacking_context = + &self.frame_builder.stacking_context_store[stacking_context_index.0]; + + if !stacking_context.is_visible { + return; + } + + let group_index = stacking_context.clip_scroll_group(); + let clip_scroll_group = &self.frame_builder.clip_scroll_group_store[group_index.0]; + (clip_scroll_group.packed_layer_index, stacking_context.pipeline_id) + }; + let scroll_layer_index = *self.scroll_layer_stack.last().unwrap(); self.rebuild_clip_info_stack_if_necessary(scroll_layer_index); - let stacking_context_index = self.stacking_context_stack.last().unwrap(); - let stacking_context = &self.frame_builder.stacking_context_store[stacking_context_index.0]; - if !stacking_context.is_visible() { - return; - } + let stacking_context = + &mut self.frame_builder.stacking_context_store[stacking_context_index.0]; - let packed_layer_index = stacking_context.packed_layer_index; let packed_layer = &self.frame_builder.packed_layers[packed_layer_index.0]; - let auxiliary_lists = self.auxiliary_lists_map.get(&stacking_context.pipeline_id) + let auxiliary_lists = self.auxiliary_lists_map.get(&pipeline_id) .expect("No auxiliary lists?"); for i in 0..prim_count { @@ -1175,6 +1463,9 @@ impl<'a> LayerRectCalculationAndCullingPass<'a> { let prim_clip_info = prim_metadata.clip_cache_info.as_ref(); let mut visible = true; + stacking_context.bounding_rect = + stacking_context.bounding_rect.union(&prim_bounding_rect); + if let Some(info) = prim_clip_info { self.current_clip_stack.push((packed_layer_index, info.clone())); } diff --git a/gfx/webrender/src/lib.rs b/gfx/webrender/src/lib.rs index a636285a861d..75f9cb50233f 100644 --- a/gfx/webrender/src/lib.rs +++ b/gfx/webrender/src/lib.rs @@ -52,6 +52,8 @@ extern crate bitflags; extern crate thread_profiler; mod batch_builder; +mod clip_scroll_node; +mod clip_scroll_tree; mod debug_colors; mod debug_font_data; mod debug_render; @@ -62,7 +64,6 @@ mod freelist; mod geometry; mod gpu_store; mod internal_types; -mod layer; mod mask_cache; mod prim_store; mod profiler; @@ -71,7 +72,6 @@ mod render_backend; mod render_task; mod resource_cache; mod scene; -mod scroll_tree; mod spring; mod texture_cache; mod tiling; diff --git a/gfx/webrender/src/platform/windows/font.rs b/gfx/webrender/src/platform/windows/font.rs index 4c0a1572a054..640cc96f7ac0 100644 --- a/gfx/webrender/src/platform/windows/font.rs +++ b/gfx/webrender/src/platform/windows/font.rs @@ -82,18 +82,24 @@ fn dwrite_render_mode(font_face: &dwrote::FontFace, fn get_glyph_dimensions_with_analysis(analysis: dwrote::GlyphRunAnalysis, texture_type: dwrote::DWRITE_TEXTURE_TYPE) - -> GlyphDimensions { + -> Option { let bounds = analysis.get_alpha_texture_bounds(texture_type); let width = (bounds.right - bounds.left) as u32; let height = (bounds.bottom - bounds.top) as u32; - assert!(width > 0 && height > 0); - GlyphDimensions { + + // Alpha texture bounds can sometimes return an empty rect + // Such as for spaces + if width == 0 || height == 0 { + return None + } + + Some(GlyphDimensions { left: bounds.left, top: -bounds.top, width: width, height: height, - } + }) } impl FontContext { @@ -203,7 +209,7 @@ impl FontContext { let analysis = self.create_glyph_analysis(key, render_mode, None); let texture_type = dwrite_texture_type(render_mode); - Some(get_glyph_dimensions_with_analysis(analysis, texture_type)) + get_glyph_dimensions_with_analysis(analysis, texture_type) } // DWRITE gives us values in RGB. WR doesn't really touch it after. Note, CG returns in BGR @@ -266,6 +272,10 @@ impl FontContext { let width = (bounds.right - bounds.left) as usize; let height = (bounds.bottom - bounds.top) as usize; + // We should not get here since glyph_dimensions would return + // None for empty glyphs. + assert!(width > 0 && height > 0); + let mut pixels = analysis.create_alpha_texture(texture_type, bounds); let lut_correction = match glyph_options { diff --git a/gfx/webrender/src/prim_store.rs b/gfx/webrender/src/prim_store.rs index 460d65dc5cb6..7dffa5bde04e 100644 --- a/gfx/webrender/src/prim_store.rs +++ b/gfx/webrender/src/prim_store.rs @@ -30,7 +30,7 @@ pub const MASK_DATA_GPU_SIZE: usize = 1; /// may grow. Storing them as texel coords and normalizing /// the UVs in the vertex shader means nothing needs to be /// updated on the CPU when the texture size changes. -#[derive(Clone)] +#[derive(Copy, Clone, Debug)] pub struct TexelRect { pub uv0: DevicePoint, pub uv1: DevicePoint, @@ -45,6 +45,15 @@ impl Default for TexelRect { } } +impl TexelRect { + pub fn new(u0: u32, v0: u32, u1: u32, v1: u32) -> TexelRect { + TexelRect { + uv0: DevicePoint::new(u0 as f32, v0 as f32), + uv1: DevicePoint::new(u1 as f32, v1 as f32), + } + } +} + /// For external images, it's not possible to know the /// UV coords of the image (or the image data itself) /// until the render thread receives the frame and issues @@ -136,6 +145,7 @@ pub struct ImagePrimitiveCpu { pub kind: ImagePrimitiveKind, pub color_texture_id: SourceTexture, pub resource_address: GpuStoreAddress, + pub sub_rect: Option, } #[derive(Debug, Clone)] @@ -920,8 +930,18 @@ impl PrimitiveStore { if let Some(cache_item) = cache_item { let resource_rect = self.gpu_resource_rects.get_mut(image_cpu.resource_address); - resource_rect.uv0 = cache_item.uv0; - resource_rect.uv1 = cache_item.uv1; + match image_cpu.sub_rect { + Some(sub_rect) => { + resource_rect.uv0.x = cache_item.uv0.x + sub_rect.uv0.x; + resource_rect.uv0.y = cache_item.uv0.y + sub_rect.uv0.y; + resource_rect.uv1.x = cache_item.uv0.x + sub_rect.uv1.x; + resource_rect.uv1.y = cache_item.uv0.y + sub_rect.uv1.y; + } + None => { + resource_rect.uv0 = cache_item.uv0; + resource_rect.uv1 = cache_item.uv1; + } + } } image_cpu.color_texture_id = texture_id; } diff --git a/gfx/webrender/src/record.rs b/gfx/webrender/src/record.rs index a7d81ee3a732..d0b7c9b4e9e0 100644 --- a/gfx/webrender/src/record.rs +++ b/gfx/webrender/src/record.rs @@ -2,8 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use bincode::serde::serialize; -use bincode; +use bincode::{SizeLimit, serialize}; use std::fmt::Debug; use std::mem; use std::any::TypeId; @@ -51,7 +50,7 @@ impl BinaryRecorder { impl ApiRecordingReceiver for BinaryRecorder { fn write_msg(&mut self, _: u32, msg: &ApiMsg) { if should_record_msg(msg) { - let buf = serialize(msg, bincode::SizeLimit::Infinite).unwrap(); + let buf = serialize(msg, SizeLimit::Infinite).unwrap(); self.write_length_and_data(&buf); } } diff --git a/gfx/webrender/src/render_backend.rs b/gfx/webrender/src/render_backend.rs index 25aa970d0a06..1268a6c7da04 100644 --- a/gfx/webrender/src/render_backend.rs +++ b/gfx/webrender/src/render_backend.rs @@ -21,7 +21,7 @@ use threadpool::ThreadPool; use webrender_traits::{ApiMsg, AuxiliaryLists, BuiltDisplayList, IdNamespace, ImageData}; use webrender_traits::{PipelineId, RenderNotifier, RenderDispatcher, WebGLCommand, WebGLContextId}; use webrender_traits::channel::{PayloadHelperMethods, PayloadReceiver, PayloadSender, MsgReceiver}; -use webrender_traits::{VRCompositorCommand, VRCompositorHandler}; +use webrender_traits::{BlobImageRenderer, VRCompositorCommand, VRCompositorHandler}; use offscreen_gl_context::GLContextDispatcher; /// The render backend is responsible for transforming high level display lists into @@ -68,9 +68,10 @@ impl RenderBackend { config: FrameBuilderConfig, recorder: Option>, main_thread_dispatcher: Arc>>>, + blob_image_renderer: Option>, vr_compositor_handler: Arc>>>) -> RenderBackend { - let resource_cache = ResourceCache::new(texture_cache, workers, enable_aa); + let resource_cache = ResourceCache::new(texture_cache, workers, blob_image_renderer, enable_aa); register_thread_with_profiler("Backend".to_string()); @@ -231,7 +232,7 @@ impl RenderBackend { ApiMsg::ScrollLayersWithScrollId(origin, pipeline_id, scroll_root_id) => { profile_scope!("ScrollLayersWithScrollId"); let frame = profile_counters.total_time.profile(|| { - if self.frame.scroll_layers(origin, pipeline_id, scroll_root_id) { + if self.frame.scroll_nodes(origin, pipeline_id, scroll_root_id) { Some(self.render()) } else { None @@ -261,7 +262,7 @@ impl RenderBackend { } ApiMsg::GetScrollLayerState(tx) => { profile_scope!("GetScrollLayerState"); - tx.send(self.frame.get_scroll_layer_state()) + tx.send(self.frame.get_scroll_node_state()) .unwrap() } ApiMsg::RequestWebGLContext(size, attributes, tx) => { diff --git a/gfx/webrender/src/render_task.rs b/gfx/webrender/src/render_task.rs index 81c7c819a315..929860369877 100644 --- a/gfx/webrender/src/render_task.rs +++ b/gfx/webrender/src/render_task.rs @@ -6,8 +6,8 @@ use internal_types::{HardwareCompositeOp, LowLevelFilterOp}; use mask_cache::MaskCacheInfo; use prim_store::{PrimitiveCacheKey, PrimitiveIndex}; use std::{cmp, f32, i32, mem, usize}; -use tiling::{PackedLayerIndex, RenderPass, RenderTargetIndex, ScrollLayerIndex}; -use tiling::StackingContextIndex; +use tiling::{ClipScrollGroupIndex, PackedLayerIndex, RenderPass, RenderTargetIndex}; +use tiling::{ScrollLayerIndex, StackingContextIndex}; use webrender_traits::{DeviceIntLength, DeviceIntPoint, DeviceIntRect, DeviceIntSize}; use webrender_traits::MixBlendMode; @@ -51,7 +51,7 @@ pub enum RenderTaskLocation { #[derive(Debug, Clone)] pub enum AlphaRenderItem { - Primitive(StackingContextIndex, PrimitiveIndex, i32), + Primitive(ClipScrollGroupIndex, PrimitiveIndex, i32), Blend(StackingContextIndex, RenderTaskId, LowLevelFilterOp, i32), Composite(StackingContextIndex, RenderTaskId, RenderTaskId, MixBlendMode, i32), HardwareComposite(StackingContextIndex, RenderTaskId, HardwareCompositeOp, i32), diff --git a/gfx/webrender/src/renderer.rs b/gfx/webrender/src/renderer.rs index 48c7fa2a89d4..3da64ba923ee 100644 --- a/gfx/webrender/src/renderer.rs +++ b/gfx/webrender/src/renderer.rs @@ -48,7 +48,7 @@ use util::TransformedRectKind; use webrender_traits::{ColorF, Epoch, PipelineId, RenderNotifier, RenderDispatcher}; use webrender_traits::{ExternalImageId, ImageData, ImageFormat, RenderApiSender, RendererKind}; use webrender_traits::{DeviceIntRect, DevicePoint, DeviceIntPoint, DeviceIntSize, DeviceUintSize}; -use webrender_traits::ImageDescriptor; +use webrender_traits::{ImageDescriptor, BlobImageRenderer}; use webrender_traits::channel; use webrender_traits::VRCompositorHandler; @@ -463,6 +463,11 @@ pub struct Renderer { /// use a hashmap, and allows a flat vector for performance. cache_texture_id_map: Vec, + /// A special 1x1 dummy cache texture used for shaders that expect to work + /// with the cache but are actually running in the first pass + /// when no target is yet provided as a cache texture input. + dummy_cache_texture_id: TextureId, + /// Optional trait object that allows the client /// application to provide external buffers for image data. external_image_handler: Option>, @@ -675,7 +680,10 @@ impl Renderer { options.precache_shaders) }; - let mut texture_cache = TextureCache::new(); + let device_max_size = device.max_texture_size(); + let max_texture_size = cmp::min(device_max_size, options.max_texture_size.unwrap_or(device_max_size)); + + let mut texture_cache = TextureCache::new(max_texture_size); let white_pixels: Vec = vec![ 0xff, 0xff, 0xff, 0xff, @@ -712,6 +720,15 @@ impl Renderer { TextureFilter::Linear, ImageData::Raw(Arc::new(mask_pixels))); + let dummy_cache_texture_id = device.create_texture_ids(1, TextureTarget::Array)[0]; + device.init_texture(dummy_cache_texture_id, + 1, + 1, + ImageFormat::RGBA8, + TextureFilter::Linear, + RenderTargetMode::LayerRenderTarget(1), + None); + let debug_renderer = DebugRenderer::new(&mut device); let gpu_data_textures = [ @@ -780,6 +797,8 @@ impl Renderer { // TODO(gw): Use a heuristic to select best # of worker threads. Arc::new(Mutex::new(ThreadPool::new_with_name("WebRender:Worker".to_string(), 4))) }); + + let blob_image_renderer = options.blob_image_renderer.take(); try!{ thread::Builder::new().name("RenderBackend".to_string()).spawn(move || { let mut backend = RenderBackend::new(api_rx, payload_rx, @@ -794,6 +813,7 @@ impl Renderer { config, recorder, backend_main_thread_dispatcher, + blob_image_renderer, backend_vr_compositor); backend.run(); })}; @@ -844,6 +864,7 @@ impl Renderer { pipeline_epoch_map: HashMap::with_hasher(Default::default()), main_thread_dispatcher: main_thread_dispatcher, cache_texture_id_map: Vec::new(), + dummy_cache_texture_id: dummy_cache_texture_id, external_image_handler: None, external_images: HashMap::with_hasher(Default::default()), vr_compositor_handler: vr_compositor @@ -1163,7 +1184,7 @@ impl Renderer { batch: &PrimitiveBatch, projection: &Matrix4D, render_task_data: &Vec, - cache_texture: Option, + cache_texture: TextureId, render_target: Option<(TextureId, i32)>, target_dimensions: DeviceUintSize) { let transform_kind = batch.key.flags.transform_kind(); @@ -1256,8 +1277,7 @@ impl Renderer { // Before submitting the composite batch, do the // framebuffer readbacks that are needed for each // composite operation in this batch. - let cache_texture_id = cache_texture.unwrap(); - let cache_texture_dimensions = self.device.get_texture_dimensions(cache_texture_id); + let cache_texture_dimensions = self.device.get_texture_dimensions(cache_texture); let backdrop = &render_task_data[instance.task_index as usize]; let readback = &render_task_data[instance.user_data[0] as usize]; @@ -1267,7 +1287,7 @@ impl Renderer { // Called per-instance in case the layer (and therefore FBO) // changes. The device will skip the GL call if the requested // target is already bound. - let cache_draw_target = (cache_texture_id, readback.data[4] as i32); + let cache_draw_target = (cache_texture, readback.data[4] as i32); self.device.bind_draw_target(Some(cache_draw_target), Some(cache_texture_dimensions)); let src_x = backdrop.data[0] - backdrop.data[4] + source.data[4]; @@ -1314,7 +1334,7 @@ impl Renderer { render_target: Option<(TextureId, i32)>, target: &RenderTarget, target_size: DeviceUintSize, - cache_texture: Option, + cache_texture: TextureId, should_clear: bool, background_color: Option, render_task_data: &Vec) { @@ -1327,9 +1347,7 @@ impl Renderer { self.device.set_blend(false); self.device.set_blend_mode_alpha(); - if let Some(cache_texture) = cache_texture { - self.device.bind_texture(TextureSampler::Cache, cache_texture); - } + self.device.bind_texture(TextureSampler::Cache, cache_texture); let (color, projection) = match render_target { Some(..) => ( @@ -1632,7 +1650,7 @@ impl Renderer { self.gpu_data_textures[self.gdt_index].init_frame(&mut self.device, frame); self.gdt_index = (self.gdt_index + 1) % GPU_DATA_TEXTURE_POOL; - let mut src_id = None; + let mut src_id = self.dummy_cache_texture_id; for (pass_index, pass) in frame.passes.iter().enumerate() { let (do_clear, size, target_id) = if pass.is_framebuffer { @@ -1657,7 +1675,7 @@ impl Renderer { } - src_id = target_id; + src_id = target_id.unwrap_or(self.dummy_cache_texture_id); } self.draw_render_target_debug(framebuffer_size); @@ -1716,6 +1734,14 @@ impl Renderer { } } } + + // De-initialize the Renderer safely, assuming the GL is still alive and active. + pub fn deinit(mut self) { + //Note: this is a fake frame, only needed because texture deletion is require to happen inside a frame + self.device.begin_frame(1.0); + self.device.deinit_texture(self.dummy_cache_texture_id); + self.device.end_frame(); + } } pub enum ExternalImageSource<'a> { @@ -1756,7 +1782,6 @@ pub trait ExternalImageHandler { fn release(&mut self, key: ExternalImageId); } -#[derive(Debug)] pub struct RendererOptions { pub device_pixel_ratio: f32, pub resource_override_path: Option, @@ -1770,7 +1795,9 @@ pub struct RendererOptions { pub clear_framebuffer: bool, pub clear_color: ColorF, pub render_target_debug: bool, + pub max_texture_size: Option, pub workers: Option>>, + pub blob_image_renderer: Option>, pub recorder: Option>, } @@ -1789,7 +1816,9 @@ impl Default for RendererOptions { clear_framebuffer: true, clear_color: ColorF::new(1.0, 1.0, 1.0, 1.0), render_target_debug: false, + max_texture_size: None, workers: None, + blob_image_renderer: None, recorder: None, } } diff --git a/gfx/webrender/src/resource_cache.rs b/gfx/webrender/src/resource_cache.rs index 2681ca7aa7c1..2062709230fc 100644 --- a/gfx/webrender/src/resource_cache.rs +++ b/gfx/webrender/src/resource_cache.rs @@ -24,6 +24,7 @@ use webrender_traits::{Epoch, FontKey, GlyphKey, ImageKey, ImageFormat, ImageRen use webrender_traits::{FontRenderMode, ImageData, GlyphDimensions, WebGLContextId}; use webrender_traits::{DevicePoint, DeviceIntSize, ImageDescriptor, ColorF}; use webrender_traits::{ExternalImageId, GlyphOptions, GlyphInstance}; +use webrender_traits::{BlobImageRenderer, BlobImageDescriptor, BlobImageError}; use threadpool::ThreadPool; use euclid::Point2D; @@ -209,11 +210,15 @@ pub struct ResourceCache { glyph_cache_tx: Sender, glyph_cache_result_queue: Receiver, pending_external_image_update_list: ExternalImageUpdateList, + + blob_image_renderer: Option>, + blob_image_requests: HashSet, } impl ResourceCache { pub fn new(texture_cache: TextureCache, workers: Arc>, + blob_image_renderer: Option>, enable_aa: bool) -> ResourceCache { let (glyph_cache_tx, glyph_cache_result_queue) = spawn_glyph_cache_thread(workers); @@ -232,9 +237,16 @@ impl ResourceCache { glyph_cache_tx: glyph_cache_tx, glyph_cache_result_queue: glyph_cache_result_queue, pending_external_image_update_list: ExternalImageUpdateList::new(), + + blob_image_renderer: blob_image_renderer, + blob_image_requests: HashSet::new(), } } + pub fn max_texture_size(&self) -> u32 { + self.texture_cache.max_texture_size() + } + pub fn add_font_template(&mut self, font_key: FontKey, template: FontTemplate) { // Push the new font to the glyph cache thread, and also store // it locally for glyph metric requests. @@ -248,6 +260,12 @@ impl ResourceCache { image_key: ImageKey, descriptor: ImageDescriptor, data: ImageData) { + if descriptor.width > self.max_texture_size() || descriptor.height > self.max_texture_size() { + // TODO: we need to support handle this case gracefully, cf. issue #620. + println!("Warning: texture size ({} {}) larger than the maximum size", + descriptor.width, descriptor.height); + } + let resource = ImageResource { descriptor: descriptor, data: data, @@ -321,14 +339,38 @@ impl ResourceCache { webgl_texture.size = size; } - pub fn request_image(&mut self, - key: ImageKey, - rendering: ImageRendering) { + pub fn request_image(&mut self, key: ImageKey, rendering: ImageRendering) { debug_assert!(self.state == State::AddResources); - self.pending_image_requests.push(ImageRequest { + let request = ImageRequest { key: key, rendering: rendering, - }); + }; + + let template = self.image_templates.get(&key).unwrap(); + if let ImageData::Blob(ref data) = template.data { + if let Some(ref mut renderer) = self.blob_image_renderer { + let same_epoch = match self.cached_images.resources.get(&request) { + Some(entry) => entry.epoch == template.epoch, + None => false, + }; + + if !same_epoch && self.blob_image_requests.insert(request) { + renderer.request_blob_image( + key, + data.clone(), + &BlobImageDescriptor { + width: template.descriptor.width, + height: template.descriptor.height, + format: template.descriptor.format, + // TODO(nical): figure out the scale factor (should change with zoom). + scale_factor: 1.0, + }, + ); + } + } + } else { + self.pending_image_requests.push(request); + } } pub fn request_glyphs(&mut self, @@ -453,7 +495,7 @@ impl ResourceCache { let external_id = match image_template.data { ImageData::ExternalHandle(id) => Some(id), // raw and externalBuffer are all use resource_cache. - ImageData::Raw(..) | ImageData::ExternalBuffer(..) => None, + ImageData::Raw(..) | ImageData::ExternalBuffer(..) | ImageData::Blob(..) => None, }; ImageProperties { @@ -539,51 +581,85 @@ impl ResourceCache { } } - for request in self.pending_image_requests.drain(..) { - let cached_images = &mut self.cached_images; - let image_template = &self.image_templates[&request.key]; - let image_data = image_template.data.clone(); + let mut image_requests = mem::replace(&mut self.pending_image_requests, Vec::new()); + for request in image_requests.drain(..) { + self.finalize_image_request(request, None); + } - match image_template.data { - ImageData::ExternalHandle(..) => { - // external handle doesn't need to update the texture_cache. + let mut blob_image_requests = mem::replace(&mut self.blob_image_requests, HashSet::new()); + if self.blob_image_renderer.is_some() { + for request in blob_image_requests.drain() { + match self.blob_image_renderer.as_mut().unwrap() + .resolve_blob_image(request.key) { + Ok(image) => { + self.finalize_image_request(request, Some(ImageData::new(image.data))); + } + // TODO(nical): I think that we should handle these somewhat gracefully, + // at least in the out-of-memory scenario. + Err(BlobImageError::Oom) => { + // This one should be recoverable-ish. + panic!("Failed to render a vector image (OOM)"); + } + Err(BlobImageError::InvalidKey) => { + panic!("Invalid vector image key"); + } + Err(BlobImageError::InvalidData) => { + // TODO(nical): If we run into this we should kill the content process. + panic!("Invalid vector image data"); + } + Err(BlobImageError::Other(msg)) => { + panic!("Vector image error {}", msg); + } } - ImageData::Raw(..) | ImageData::ExternalBuffer(..) => { - match cached_images.entry(request.clone(), self.current_frame_id) { - Occupied(entry) => { - let image_id = entry.get().texture_cache_id; + } + } + } - if entry.get().epoch != image_template.epoch { - self.texture_cache.update(image_id, - image_template.descriptor, - image_data); + fn finalize_image_request(&mut self, request: ImageRequest, image_data: Option) { + let image_template = &self.image_templates[&request.key]; + let image_data = image_data.unwrap_or_else(||{ + image_template.data.clone() + }); - // Update the cached epoch - *entry.into_mut() = CachedImageInfo { - texture_cache_id: image_id, - epoch: image_template.epoch, - }; - } - } - Vacant(entry) => { - let image_id = self.texture_cache.new_item_id(); + match image_template.data { + ImageData::ExternalHandle(..) => { + // external handle doesn't need to update the texture_cache. + } + ImageData::Raw(..) | ImageData::ExternalBuffer(..) | ImageData::Blob(..) => { + match self.cached_images.entry(request.clone(), self.current_frame_id) { + Occupied(entry) => { + let image_id = entry.get().texture_cache_id; - let filter = match request.rendering { - ImageRendering::Pixelated => TextureFilter::Nearest, - ImageRendering::Auto | ImageRendering::CrispEdges => TextureFilter::Linear, - }; - - self.texture_cache.insert(image_id, + if entry.get().epoch != image_template.epoch { + self.texture_cache.update(image_id, image_template.descriptor, - filter, image_data); - entry.insert(CachedImageInfo { + // Update the cached epoch + *entry.into_mut() = CachedImageInfo { texture_cache_id: image_id, epoch: image_template.epoch, - }); + }; } } + Vacant(entry) => { + let image_id = self.texture_cache.new_item_id(); + + let filter = match request.rendering { + ImageRendering::Pixelated => TextureFilter::Nearest, + ImageRendering::Auto | ImageRendering::CrispEdges => TextureFilter::Linear, + }; + + self.texture_cache.insert(image_id, + image_template.descriptor, + filter, + image_data); + + entry.insert(CachedImageInfo { + texture_cache_id: image_id, + epoch: image_template.epoch, + }); + } } } } diff --git a/gfx/webrender/src/texture_cache.rs b/gfx/webrender/src/texture_cache.rs index 4c3567e443b2..f7135dbfd0ec 100644 --- a/gfx/webrender/src/texture_cache.rs +++ b/gfx/webrender/src/texture_cache.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use device::{MAX_TEXTURE_SIZE, TextureFilter}; +use device::TextureFilter; use fnv::FnvHasher; use freelist::{FreeList, FreeListItem, FreeListItemId}; use internal_types::{TextureUpdate, TextureUpdateOp}; @@ -28,9 +28,6 @@ const MAX_RGBA_PIXELS_PER_TEXTURE: u32 = MAX_BYTES_PER_TEXTURE / 4; /// The desired initial size of each texture, in pixels. const INITIAL_TEXTURE_SIZE: u32 = 1024; -/// The desired initial area of each texture, in pixels squared. -const INITIAL_TEXTURE_AREA: u32 = INITIAL_TEXTURE_SIZE * INITIAL_TEXTURE_SIZE; - /// The square root of the number of RGBA pixels we're allowed to use for a texture, rounded down. /// to the next power of two. const SQRT_MAX_RGBA_PIXELS_PER_TEXTURE: u32 = 8192; @@ -330,9 +327,8 @@ impl TexturePage { self.texture_size = new_texture_size } - fn can_grow(&self) -> bool { - self.texture_size.width < max_texture_size() || - self.texture_size.height < max_texture_size() + fn can_grow(&self, max_size: u32) -> bool { + self.texture_size.width < max_size || self.texture_size.height < max_size } } @@ -541,6 +537,7 @@ pub struct TextureCache { items: FreeList, arena: TextureCacheArena, pending_updates: TextureUpdateList, + max_texture_size: u32, } #[derive(PartialEq, Eq, Debug)] @@ -556,16 +553,25 @@ pub struct AllocationResult { } impl TextureCache { - pub fn new() -> TextureCache { + pub fn new(mut max_texture_size: u32) -> TextureCache { + if max_texture_size * max_texture_size > MAX_RGBA_PIXELS_PER_TEXTURE { + max_texture_size = SQRT_MAX_RGBA_PIXELS_PER_TEXTURE; + } + TextureCache { cache_id_list: CacheTextureIdList::new(), free_texture_levels: HashMap::with_hasher(Default::default()), items: FreeList::new(), pending_updates: TextureUpdateList::new(), arena: TextureCacheArena::new(), + max_texture_size: max_texture_size, } } + pub fn max_texture_size(&self) -> u32 { + self.max_texture_size + } + pub fn pending_updates(&mut self) -> TextureUpdateList { mem::replace(&mut self.pending_updates, TextureUpdateList::new()) } @@ -626,8 +632,8 @@ impl TextureCache { }; // TODO(gw): Handle this sensibly (support failing to render items that can't fit?) - assert!(requested_size.width < max_texture_size()); - assert!(requested_size.height < max_texture_size()); + assert!(requested_size.width < self.max_texture_size); + assert!(requested_size.height < self.max_texture_size); // Loop until an allocation succeeds, growing or adding new // texture pages as required. @@ -651,11 +657,11 @@ impl TextureCache { } } - if !page_list.is_empty() && page_list.last().unwrap().can_grow() { + if !page_list.is_empty() && page_list.last().unwrap().can_grow(self.max_texture_size) { let last_page = page_list.last_mut().unwrap(); // Grow the texture. - let new_width = cmp::min(last_page.texture_size.width * 2, max_texture_size()); - let new_height = cmp::min(last_page.texture_size.height * 2, max_texture_size()); + let new_width = cmp::min(last_page.texture_size.width * 2, self.max_texture_size); + let new_height = cmp::min(last_page.texture_size.height * 2, self.max_texture_size); let texture_size = DeviceUintSize::new(new_width, new_height); self.pending_updates.push(TextureUpdate { id: last_page.texture_id, @@ -673,7 +679,7 @@ impl TextureCache { } // We need a new page. - let texture_size = initial_texture_size(); + let texture_size = initial_texture_size(self.max_texture_size); let free_texture_levels_entry = self.free_texture_levels.entry(format); let mut free_texture_levels = match free_texture_levels_entry { Entry::Vacant(entry) => entry.insert(Vec::new()), @@ -714,6 +720,9 @@ impl TextureCache { ImageData::ExternalHandle(..) | ImageData::ExternalBuffer(..)=> { panic!("Doesn't support Update() for external image."); } + ImageData::Blob(..) => { + panic!("The vector image should have been rasterized into a raw image."); + } ImageData::Raw(bytes) => { TextureUpdateOp::Update { page_pos_x: existing_item.allocated_rect.origin.x, @@ -739,6 +748,10 @@ impl TextureCache { descriptor: ImageDescriptor, filter: TextureFilter, data: ImageData) { + if let ImageData::Blob(..) = data { + panic!("must rasterize the vector image before adding to the cache"); + } + let width = descriptor.width; let height = descriptor.height; let format = descriptor.format; @@ -756,6 +769,9 @@ impl TextureCache { ImageData::ExternalHandle(..) => { panic!("External handle should not go through texture_cache."); } + ImageData::Blob(..) => { + panic!("The vector image should have been rasterized."); + } ImageData::Raw(bytes) => { let update_op = TextureUpdate { id: result.item.texture_id, @@ -877,22 +893,7 @@ pub struct FreeTextureLevel { } /// Returns the number of pixels on a side we start out with for our texture atlases. -fn initial_texture_size() -> DeviceUintSize { - let max_hardware_texture_size = *MAX_TEXTURE_SIZE as u32; - let initial_size = if max_hardware_texture_size * max_hardware_texture_size > INITIAL_TEXTURE_AREA { - INITIAL_TEXTURE_SIZE - } else { - max_hardware_texture_size - }; +fn initial_texture_size(max_texture_size: u32) -> DeviceUintSize { + let initial_size = cmp::min(max_texture_size, INITIAL_TEXTURE_SIZE); DeviceUintSize::new(initial_size, initial_size) } - -/// Returns the number of pixels on a side we're allowed to use for our texture atlases. -fn max_texture_size() -> u32 { - let max_hardware_texture_size = *MAX_TEXTURE_SIZE as u32; - if max_hardware_texture_size * max_hardware_texture_size > MAX_RGBA_PIXELS_PER_TEXTURE { - SQRT_MAX_RGBA_PIXELS_PER_TEXTURE - } else { - max_hardware_texture_size - } -} diff --git a/gfx/webrender/src/tiling.rs b/gfx/webrender/src/tiling.rs index 36f556ce5413..c35c5774f2e3 100644 --- a/gfx/webrender/src/tiling.rs +++ b/gfx/webrender/src/tiling.rs @@ -534,12 +534,13 @@ impl AlphaBatcher { for item in &task.alpha_items { let (batch_key, item_bounding_rect) = match item { &AlphaRenderItem::Blend(stacking_context_index, ..) => { - let stacking_context = &ctx.stacking_context_store[stacking_context_index.0]; + let stacking_context = + &ctx.stacking_context_store[stacking_context_index.0]; (AlphaBatchKey::new(AlphaBatchKind::Blend, AlphaBatchKeyFlags::empty(), BlendMode::Alpha, BatchTextures::no_texture()), - &stacking_context.xf_rect.as_ref().unwrap().bounding_rect) + &stacking_context.bounding_rect) } &AlphaRenderItem::HardwareComposite(stacking_context_index, _, composite_op, ..) => { let stacking_context = &ctx.stacking_context_store[stacking_context_index.0]; @@ -547,7 +548,7 @@ impl AlphaBatcher { AlphaBatchKeyFlags::empty(), composite_op.to_blend_mode(), BatchTextures::no_texture()), - &stacking_context.xf_rect.as_ref().unwrap().bounding_rect) + &stacking_context.bounding_rect) } &AlphaRenderItem::Composite(stacking_context_index, backdrop_id, @@ -567,11 +568,10 @@ impl AlphaBatcher { alpha_batches.push(batch); continue; } - &AlphaRenderItem::Primitive(stacking_context_index, prim_index, _) => { - let stacking_context = - &ctx.stacking_context_store[stacking_context_index.0]; + &AlphaRenderItem::Primitive(clip_scroll_group_index, prim_index, _) => { + let group = &ctx.clip_scroll_group_store[clip_scroll_group_index.0]; let prim_metadata = ctx.prim_store.get_metadata(prim_index); - let transform_kind = stacking_context.xf_rect.as_ref().unwrap().kind; + let transform_kind = group.xf_rect.as_ref().unwrap().kind; let needs_clipping = prim_metadata.clip_task.is_some(); let needs_blending = transform_kind == TransformedRectKind::Complex || !prim_metadata.is_opaque || @@ -616,11 +616,7 @@ impl AlphaBatcher { PrimitiveBatchItem::StackingContext(stacking_context_index) => { let stacking_context = &ctx.stacking_context_store[stacking_context_index.0]; - stacking_context.xf_rect - .as_ref() - .unwrap() - .bounding_rect - .intersects(item_bounding_rect) + stacking_context.bounding_rect.intersects(item_bounding_rect) } PrimitiveBatchItem::Primitive(prim_index) => { let bounding_rect = &ctx.prim_store.cpu_bounding_rects[prim_index.0]; @@ -665,18 +661,19 @@ impl AlphaBatcher { z); } &AlphaRenderItem::HardwareComposite(stacking_context_index, src_id, _, z) => { - ctx.prim_store.add_hardware_composite_to_batch(stacking_context_index, - batch, - task_index, - render_tasks.get_static_task_index(&src_id), - z); + ctx.prim_store.add_hardware_composite_to_batch( + stacking_context_index, + batch, + task_index, + render_tasks.get_static_task_index(&src_id), + z); } - &AlphaRenderItem::Primitive(stacking_context_index, prim_index, z) => { - let stacking_context = - &ctx.stacking_context_store[stacking_context_index.0]; + &AlphaRenderItem::Primitive(clip_scroll_group_index, prim_index, z) => { + let packed_layer = ctx.clip_scroll_group_store[clip_scroll_group_index.0] + .packed_layer_index; ctx.prim_store.add_prim_to_batch(prim_index, batch, - stacking_context.packed_layer_index, + packed_layer, task_index, render_tasks, child_pass_index, @@ -690,10 +687,10 @@ impl AlphaBatcher { &AlphaRenderItem::Composite(..) => unreachable!(), &AlphaRenderItem::Blend(..) => unreachable!(), &AlphaRenderItem::HardwareComposite(..) => unreachable!(), - &AlphaRenderItem::Primitive(stacking_context_index, prim_index, _) => { - let stacking_context = &ctx.stacking_context_store[stacking_context_index.0]; + &AlphaRenderItem::Primitive(clip_scroll_group_index, prim_index, _) => { + let group = &ctx.clip_scroll_group_store[clip_scroll_group_index.0]; + let transform_kind = group.xf_rect.as_ref().unwrap().kind; let prim_metadata = ctx.prim_store.get_metadata(prim_index); - let transform_kind = stacking_context.xf_rect.as_ref().unwrap().kind; let needs_clipping = prim_metadata.clip_task.is_some(); let needs_blending = transform_kind == TransformedRectKind::Complex || !prim_metadata.is_opaque || @@ -745,12 +742,13 @@ impl AlphaBatcher { &AlphaRenderItem::Composite(..) => unreachable!(), &AlphaRenderItem::Blend(..) => unreachable!(), &AlphaRenderItem::HardwareComposite(..) => unreachable!(), - &AlphaRenderItem::Primitive(stacking_context_index, prim_index, z) => { - let stacking_context = - &ctx.stacking_context_store[stacking_context_index.0]; + &AlphaRenderItem::Primitive(clip_scroll_group_index, prim_index, z) => { + let packed_layer_index = + ctx.clip_scroll_group_store[clip_scroll_group_index.0] + .packed_layer_index; ctx.prim_store.add_prim_to_batch(prim_index, batch, - stacking_context.packed_layer_index, + packed_layer_index, task_index, render_tasks, child_pass_index, @@ -848,6 +846,7 @@ impl ClipBatcher { pub struct RenderTargetContext<'a> { pub stacking_context_store: &'a [StackingContext], + pub clip_scroll_group_store: &'a [ClipScrollGroup], pub prim_store: &'a PrimitiveStore, pub resource_cache: &'a ResourceCache, } @@ -1299,14 +1298,63 @@ pub struct PackedLayerIndex(pub usize); #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)] pub struct StackingContextIndex(pub usize); +#[derive(Debug)] pub struct StackingContext { pub pipeline_id: PipelineId, pub local_transform: LayerToScrollTransform, pub local_rect: LayerRect, - pub scroll_layer_id: ScrollLayerId, - pub xf_rect: Option, + pub bounding_rect: DeviceIntRect, pub composite_ops: CompositeOps, + pub clip_scroll_groups: Vec, + pub is_visible: bool, +} + +impl StackingContext { + pub fn new(pipeline_id: PipelineId, + local_transform: LayerToScrollTransform, + local_rect: LayerRect, + composite_ops: CompositeOps, + clip_scroll_group_index: ClipScrollGroupIndex) + -> StackingContext { + StackingContext { + pipeline_id: pipeline_id, + local_transform: local_transform, + local_rect: local_rect, + bounding_rect: DeviceIntRect::zero(), + composite_ops: composite_ops, + clip_scroll_groups: vec![clip_scroll_group_index], + is_visible: false, + } + } + + pub fn clip_scroll_group(&self) -> ClipScrollGroupIndex { + // Currently there is only one scrolled stacking context per context, + // but eventually this will be selected from the vector based on the + // scroll layer of this primitive. + self.clip_scroll_groups[0] + } + + pub fn can_contribute_to_scene(&self) -> bool { + !self.composite_ops.will_make_invisible() + } +} + +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)] +pub struct ClipScrollGroupIndex(pub usize); + +#[derive(Debug)] +pub struct ClipScrollGroup { + pub stacking_context_index: StackingContextIndex, + pub scroll_layer_id: ScrollLayerId, pub packed_layer_index: PackedLayerIndex, + pub pipeline_id: PipelineId, + pub xf_rect: Option, +} + +impl ClipScrollGroup { + pub fn is_visible(&self) -> bool { + self.xf_rect.is_some() + } } #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Ord, PartialOrd)] @@ -1386,16 +1434,6 @@ impl CompositeOps { } } -impl StackingContext { - pub fn is_visible(&self) -> bool { - self.xf_rect.is_some() - } - - pub fn can_contribute_to_scene(&self) -> bool { - !self.composite_ops.will_make_invisible() - } -} - /// A rendering-oriented representation of frame::Frame built by the render backend /// and presented to the renderer. pub struct Frame { diff --git a/gfx/webrender_bindings/Cargo.toml b/gfx/webrender_bindings/Cargo.toml index 057913d2ace4..8878aeb28c04 100644 --- a/gfx/webrender_bindings/Cargo.toml +++ b/gfx/webrender_bindings/Cargo.toml @@ -5,15 +5,15 @@ authors = ["The Mozilla Project Developers"] license = "MPL-2.0" [dependencies] -webrender_traits = {path = "../webrender_traits", version = "0.14"} -euclid = "0.10" -app_units = "0.3" +webrender_traits = {path = "../webrender_traits", version = "0.19"} +euclid = "0.11" +app_units = "0.4" gleam = "0.2" fnv="1.0" [dependencies.webrender] path = "../webrender" -version = "0.15" +version = "0.19" default-features = false features = ["codegen"] diff --git a/gfx/webrender_bindings/src/bindings.rs b/gfx/webrender_bindings/src/bindings.rs index dbeabb0dc47b..a81ca6dc712b 100644 --- a/gfx/webrender_bindings/src/bindings.rs +++ b/gfx/webrender_bindings/src/bindings.rs @@ -3,7 +3,7 @@ use std::{mem, slice}; use std::path::PathBuf; use std::os::raw::{c_void, c_char}; use gleam::gl; -use webrender_traits::{BorderSide, BorderStyle, BorderRadius}; +use webrender_traits::{BorderSide, BorderStyle, BorderRadius, BorderWidths, BorderDetails, NormalBorder}; use webrender_traits::{PipelineId, ClipRegion, PropertyBinding}; use webrender_traits::{Epoch, ExtendMode, ColorF, GlyphInstance, GradientStop, ImageDescriptor}; use webrender_traits::{FilterOp, ImageData, ImageFormat, ImageKey, ImageMask, ImageRendering, RendererKind, MixBlendMode}; @@ -595,7 +595,9 @@ pub extern fn wr_api_set_root_pipeline(api: &mut RenderApi, pipeline_id: Pipelin pub extern fn wr_api_add_image(api: &mut RenderApi, descriptor: &WrImageDescriptor, bytes: * const u8, size: usize) -> ImageKey { assert!( unsafe { is_in_compositor_thread() }); let bytes = unsafe { slice::from_raw_parts(bytes, size).to_owned() }; - return api.add_image( + let image_key = api.generate_image_key(); + api.add_image( + image_key, ImageDescriptor { width: descriptor.width, height: descriptor.height, @@ -605,6 +607,7 @@ pub extern fn wr_api_add_image(api: &mut RenderApi, descriptor: &WrImageDescript }, ImageData::new(bytes) ); + image_key } #[no_mangle] @@ -680,14 +683,24 @@ pub extern fn wr_dp_push_border(state: &mut WrState, rect: WrRect, clip: WrRect, radius: WrBorderRadius) { assert!( unsafe { is_in_compositor_thread() }); let clip_region = state.frame_builder.dl_builder.new_clip_region(&clip.to_rect(), Vec::new(), None); + let border_widths = BorderWidths { + left: left.width, + top: top.width, + right: right.width, + bottom: bottom.width + }; + let border_details = BorderDetails::Normal(NormalBorder { + left: left.to_border_side(), + right: right.to_border_side(), + top: top.to_border_side(), + bottom: bottom.to_border_side(), + radius: radius.to_border_radius(), + }); state.frame_builder.dl_builder.push_border( rect.to_rect(), clip_region, - left.to_border_side(), - top.to_border_side(), - right.to_border_side(), - bottom.to_border_side(), - radius.to_border_radius()); + border_widths, + border_details); } #[no_mangle] @@ -793,7 +806,7 @@ impl WrBorderSide { pub fn to_border_side(&self) -> BorderSide { - BorderSide { width: self.width, color: self.color.to_color(), style: self.style } + BorderSide { color: self.color.to_color(), style: self.style } } } @@ -919,7 +932,9 @@ pub extern fn wr_api_add_raw_font(api: &mut RenderApi, let mut font_vector = Vec::new(); font_vector.extend_from_slice(font_slice); - return api.add_raw_font(font_vector); + let font_key = api.generate_font_key(); + api.add_raw_font(font_key, font_vector); + font_key } #[no_mangle] diff --git a/gfx/webrender_traits/Cargo.toml b/gfx/webrender_traits/Cargo.toml index b10414a64a21..b8d61dc31569 100644 --- a/gfx/webrender_traits/Cargo.toml +++ b/gfx/webrender_traits/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "webrender_traits" -version = "0.14.0" +version = "0.19.0" authors = ["Glenn Watson "] license = "MPL-2.0" repository = "https://github.com/servo/webrender" @@ -13,23 +13,23 @@ codegen = ["serde_codegen", "serde_codegen/with-syntex"] ipc = ["ipc-channel"] [dependencies] -app_units = "0.3.0" +app_units = "0.4" byteorder = "1.0" -euclid = "0.10.3" +euclid = "0.11" gleam = "0.2" heapsize = "0.3.6" -offscreen_gl_context = {version = "0.5.0", features = ["serde_serialization"]} -serde = "0.8" -serde_derive = {version = "0.8", optional = true} -ipc-channel = { version = "0.5.0", optional = true } +ipc-channel = {version = "0.7", optional = true} +offscreen_gl_context = {version = "0.6", features = ["serde"]} +serde = "0.9" +serde_derive = {version = "0.9", optional = true} [target.'cfg(target_os = "macos")'.dependencies] -core-graphics = "0.6" +core-graphics = "0.7" [target.'cfg(target_os = "windows")'.dependencies] -dwrote = "0.1.1" +servo-dwrote = "0.2" [build-dependencies.serde_codegen] -version = "0.8" +version = "0.9" default_features = false optional = true diff --git a/gfx/webrender_traits/src/api.rs b/gfx/webrender_traits/src/api.rs index a8967813d28e..f89d539b1131 100644 --- a/gfx/webrender_traits/src/api.rs +++ b/gfx/webrender_traits/src/api.rs @@ -54,20 +54,19 @@ impl RenderApi { RenderApiSender::new(self.api_sender.clone(), self.payload_sender.clone()) } - pub fn add_raw_font(&self, bytes: Vec) -> FontKey { + pub fn generate_font_key(&self) -> FontKey { let new_id = self.next_unique_id(); - let key = FontKey::new(new_id.0, new_id.1); - let msg = ApiMsg::AddRawFont(key, bytes); - self.api_sender.send(msg).unwrap(); - key + FontKey::new(new_id.0, new_id.1) } - pub fn add_native_font(&self, native_font_handle: NativeFontHandle) -> FontKey { - let new_id = self.next_unique_id(); - let key = FontKey::new(new_id.0, new_id.1); + pub fn add_raw_font(&self, key: FontKey, bytes: Vec) { + let msg = ApiMsg::AddRawFont(key, bytes); + self.api_sender.send(msg).unwrap(); + } + + pub fn add_native_font(&self, key: FontKey, native_font_handle: NativeFontHandle) { let msg = ApiMsg::AddNativeFont(key, native_font_handle); self.api_sender.send(msg).unwrap(); - key } /// Gets the dimensions for the supplied glyph keys @@ -84,19 +83,18 @@ impl RenderApi { } /// Creates an `ImageKey`. - pub fn alloc_image(&self) -> ImageKey { + pub fn generate_image_key(&self) -> ImageKey { let new_id = self.next_unique_id(); ImageKey::new(new_id.0, new_id.1) } - /// Adds an image and returns the corresponding `ImageKey`. + /// Adds an image identified by the `ImageKey`. pub fn add_image(&self, + key: ImageKey, descriptor: ImageDescriptor, - data: ImageData) -> ImageKey { - let key = self.alloc_image(); + data: ImageData) { let msg = ApiMsg::AddImage(key, descriptor, data); self.api_sender.send(msg).unwrap(); - key } /// Updates a specific image. diff --git a/gfx/webrender_traits/src/channel_mpsc.rs b/gfx/webrender_traits/src/channel_mpsc.rs index e163d3283f42..165318fd3ddf 100644 --- a/gfx/webrender_traits/src/channel_mpsc.rs +++ b/gfx/webrender_traits/src/channel_mpsc.rs @@ -67,26 +67,26 @@ pub fn msg_channel() -> Result<(MsgSender, MsgReceiver), Error> { /// impl Serialize for MsgReceiver { - fn serialize(&self, _: &mut S) -> Result<(), S::Error> { + fn serialize(&self, _: S) -> Result { unreachable!(); } } impl Serialize for MsgSender { - fn serialize(&self, _: &mut S) -> Result<(), S::Error> { + fn serialize(&self, _: S) -> Result { unreachable!(); } } impl Deserialize for MsgReceiver { - fn deserialize(_: &mut D) -> Result, D::Error> + fn deserialize(_: D) -> Result, D::Error> where D: Deserializer { unreachable!(); } } impl Deserialize for MsgSender { - fn deserialize(_: &mut D) -> Result, D::Error> + fn deserialize(_: D) -> Result, D::Error> where D: Deserializer { unreachable!(); } diff --git a/gfx/webrender_traits/src/display_item.rs b/gfx/webrender_traits/src/display_item.rs index 334451574fb3..0a82b12a4fce 100644 --- a/gfx/webrender_traits/src/display_item.rs +++ b/gfx/webrender_traits/src/display_item.rs @@ -3,33 +3,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use display_list::AuxiliaryListsBuilder; -use {BorderRadius, BorderDisplayItem, ClipRegion, ColorF, ComplexClipRegion}; +use {BorderRadius, ClipRegion, ColorF, ComplexClipRegion}; use {FontKey, ImageKey, PipelineId, ScrollLayerId, ScrollLayerInfo, ServoScrollRootId}; use {ImageMask, ItemRange}; use {LayoutSize, LayoutPoint, LayoutRect}; -impl BorderDisplayItem { - pub fn top_left_inner_radius(&self) -> LayoutSize { - LayoutSize::new((self.radius.top_left.width - self.left.width).max(0.0), - (self.radius.top_left.height - self.top.width).max(0.0)) - } - - pub fn top_right_inner_radius(&self) -> LayoutSize { - LayoutSize::new((self.radius.top_right.width - self.right.width).max(0.0), - (self.radius.top_right.height - self.top.width).max(0.0)) - } - - pub fn bottom_left_inner_radius(&self) -> LayoutSize { - LayoutSize::new((self.radius.bottom_left.width - self.left.width).max(0.0), - (self.radius.bottom_left.height - self.bottom.width).max(0.0)) - } - - pub fn bottom_right_inner_radius(&self) -> LayoutSize { - LayoutSize::new((self.radius.bottom_right.width - self.right.width).max(0.0), - (self.radius.bottom_right.height - self.bottom.width).max(0.0)) - } -} - impl BorderRadius { pub fn zero() -> BorderRadius { BorderRadius { @@ -49,7 +27,23 @@ impl BorderRadius { } } - pub fn is_uniform(&self) -> Option { + pub fn uniform_size(radius: LayoutSize) -> BorderRadius { + BorderRadius { + top_left: radius, + top_right: radius, + bottom_left: radius, + bottom_right: radius, + } + } + + pub fn is_uniform(&self) -> Option { + match self.is_uniform_size() { + Some(radius) if radius.width == radius.height => Some(radius.width), + _ => None + } + } + + pub fn is_uniform_size(&self) -> Option { let uniform_radius = self.top_left; if self.top_right == uniform_radius && self.bottom_left == uniform_radius && @@ -62,7 +56,7 @@ impl BorderRadius { pub fn is_zero(&self) -> bool { if let Some(radius) = self.is_uniform() { - radius.width == 0.0 && radius.height == 0.0 + radius == 0.0 } else { false } diff --git a/gfx/webrender_traits/src/display_list.rs b/gfx/webrender_traits/src/display_list.rs index c0ce0897f14d..1a5ddb7cc693 100644 --- a/gfx/webrender_traits/src/display_list.rs +++ b/gfx/webrender_traits/src/display_list.rs @@ -5,8 +5,8 @@ use app_units::Au; use std::mem; use std::slice; -use {AuxiliaryLists, AuxiliaryListsDescriptor, BorderDisplayItem, BorderRadius}; -use {BorderSide, BoxShadowClipMode, BoxShadowDisplayItem, BuiltDisplayList}; +use {AuxiliaryLists, AuxiliaryListsDescriptor, BorderDisplayItem}; +use {BoxShadowClipMode, BoxShadowDisplayItem, BuiltDisplayList}; use {BuiltDisplayListDescriptor, ClipRegion, ComplexClipRegion, ColorF}; use {DisplayItem, DisplayListMode, ExtendMode, FilterOp, YuvColorSpace}; use {FontKey, GlyphInstance, GradientDisplayItem, RadialGradientDisplayItem, GradientStop, IframeDisplayItem}; @@ -15,7 +15,7 @@ use {PushScrollLayerItem, PushStackingContextDisplayItem, RectangleDisplayItem, use {ScrollPolicy, ServoScrollRootId, SpecificDisplayItem, StackingContext, TextDisplayItem}; use {WebGLContextId, WebGLDisplayItem, YuvImageDisplayItem}; use {LayoutTransform, LayoutPoint, LayoutRect, LayoutSize}; -use {GlyphOptions, PropertyBinding}; +use {BorderDetails, BorderWidths, GlyphOptions, PropertyBinding}; impl BuiltDisplayListDescriptor { pub fn size(&self) -> usize { @@ -186,17 +186,11 @@ impl DisplayListBuilder { pub fn push_border(&mut self, rect: LayoutRect, clip: ClipRegion, - left: BorderSide, - top: BorderSide, - right: BorderSide, - bottom: BorderSide, - radius: BorderRadius) { + widths: BorderWidths, + details: BorderDetails) { let item = BorderDisplayItem { - left: left, - top: top, - right: right, - bottom: bottom, - radius: radius, + details: details, + widths: widths, }; let display_item = DisplayItem { diff --git a/gfx/webrender_traits/src/types.rs b/gfx/webrender_traits/src/types.rs index cc7a51e449e3..69b059297f54 100644 --- a/gfx/webrender_traits/src/types.rs +++ b/gfx/webrender_traits/src/types.rs @@ -6,7 +6,7 @@ // for the serde implementations. use app_units::Au; -use euclid::Point2D; +use euclid::{Point2D, SideOffsets2D}; use channel::{PayloadSender, MsgSender}; #[cfg(feature = "nightly")] use core::nonzero::NonZero; @@ -175,7 +175,7 @@ pub struct AuxiliaryListsDescriptor { } #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] -pub struct BorderDisplayItem { +pub struct NormalBorder { pub left: BorderSide, pub right: BorderSide, pub top: BorderSide, @@ -183,6 +183,42 @@ pub struct BorderDisplayItem { pub radius: BorderRadius, } +#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] +pub enum RepeatMode { + Stretch, + Repeat, + Round, + Space, +} + +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub struct NinePatchDescriptor { + pub width: u32, + pub height: u32, + pub slice: SideOffsets2D, +} + +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub struct ImageBorder { + pub image_key: ImageKey, + pub patch: NinePatchDescriptor, + pub outset: SideOffsets2D, + pub repeat_horizontal: RepeatMode, + pub repeat_vertical: RepeatMode, +} + +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub enum BorderDetails { + Normal(NormalBorder), + Image(ImageBorder), +} + +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub struct BorderDisplayItem { + pub widths: BorderWidths, + pub details: BorderDetails, +} + #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] pub struct BorderRadius { pub top_left: LayoutSize, @@ -191,10 +227,17 @@ pub struct BorderRadius { pub bottom_right: LayoutSize, } +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub struct BorderWidths { + pub left: f32, + pub top: f32, + pub right: f32, + pub bottom: f32, +} + #[repr(C)] #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] pub struct BorderSide { - pub width: f32, pub color: ColorF, pub style: BorderStyle, } @@ -605,9 +648,44 @@ pub enum YuvColorSpace { #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] pub struct ExternalImageId(pub u64); +pub trait BlobImageRenderer: Send { + fn request_blob_image(&mut self, + key: ImageKey, + data: Arc, + descriptor: &BlobImageDescriptor); + fn resolve_blob_image(&mut self, key: ImageKey) -> BlobImageResult; +} + +pub type BlobImageData = Vec; + +#[derive(Copy, Clone, Debug)] +pub struct BlobImageDescriptor { + pub width: u32, + pub height: u32, + pub format: ImageFormat, + pub scale_factor: f32, +} + +pub struct RasterizedBlobImage { + pub width: u32, + pub height: u32, + pub data: Vec, +} + +#[derive(Clone, Debug)] +pub enum BlobImageError { + Oom, + InvalidKey, + InvalidData, + Other(String), +} + +pub type BlobImageResult = Result; + #[derive(Clone, Serialize, Deserialize)] pub enum ImageData { Raw(Arc>), + Blob(Arc), ExternalHandle(ExternalImageId), ExternalBuffer(ExternalImageId), } @@ -620,6 +698,14 @@ impl ImageData { pub fn new_shared(bytes: Arc>) -> ImageData { ImageData::Raw(bytes) } + + pub fn new_blob_image(commands: Vec) -> ImageData { + ImageData::Blob(Arc::new(commands)) + } + + pub fn new_shared_blob_image(commands: Arc>) -> ImageData { + ImageData::Blob(commands) + } } #[repr(C)] @@ -987,12 +1073,12 @@ macro_rules! define_resource_id { define_resource_id_struct!($name); impl ::serde::Deserialize for $name { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: ::serde::Deserializer { let id = try!(u32::deserialize(deserializer)); if id == 0 { - Err(::serde::Error::invalid_value("expected a non-zero value")) + Err(::serde::de::Error::custom("expected a non-zero value")) } else { Ok(unsafe { $name::new(id) }) } @@ -1000,7 +1086,7 @@ macro_rules! define_resource_id { } impl ::serde::Serialize for $name { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: ::serde::Serializer { self.get().serialize(serializer) diff --git a/third_party/rust/app_units-0.3.0/.cargo-checksum.json b/third_party/rust/app_units-0.3.0/.cargo-checksum.json deleted file mode 100644 index a6d8c203c1eb..000000000000 --- a/third_party/rust/app_units-0.3.0/.cargo-checksum.json +++ /dev/null @@ -1 +0,0 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"12cc0f91b51fedf41ae1670d1624ee1d78a284bdb101645b60a06a12de16c069",".travis.yml":"6b96b2c6bfd7e1acef4b825a2813fc4277859eb9400a16800db8835c25e4087d","Cargo.toml":"789b93a48ce76901375209d5462408469c31809e09a98e71370c57187a4b0923","README.md":"9f048d969f9f8333cdcdb892744cd0816e4f2922c8817fa5e9e07f9472fe1050","src/app_unit.rs":"71b0ac2fa378427883649def1a03008ac9d4eb45addd084b7d9885867049551e","src/lib.rs":"2df7d863c47d8b22f9af66caeafa87e6a206ee713a8aeaa55c5a80a42a92513b"},"package":"636ee56f12e31dbc11dc0a1ac6004f08b04e6e6595963716fc8130e90d4e04cf"} \ No newline at end of file diff --git a/third_party/rust/app_units-0.3.0/.gitignore b/third_party/rust/app_units-0.3.0/.gitignore deleted file mode 100644 index 2c96eb1b6517..000000000000 --- a/third_party/rust/app_units-0.3.0/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -target/ -Cargo.lock diff --git a/third_party/rust/app_units-0.3.0/.travis.yml b/third_party/rust/app_units-0.3.0/.travis.yml deleted file mode 100644 index a9df73baa47a..000000000000 --- a/third_party/rust/app_units-0.3.0/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: rust -notifications: - webhooks: http://build.servo.org:54856/travis - -rust: - - stable - - beta - - nightly diff --git a/third_party/rust/app_units-0.3.0/Cargo.toml b/third_party/rust/app_units-0.3.0/Cargo.toml deleted file mode 100644 index 0d8362b61189..000000000000 --- a/third_party/rust/app_units-0.3.0/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "app_units" -version = "0.3.0" -authors = ["The Servo Project Developers"] -description = "Servo app units type (Au)" -documentation = "http://doc.servo.org/app_units/" -repository = "https://github.com/servo/app_units" -license = "MPL-2.0" - -[features] -default = [] -plugins = [] - -[dependencies] -heapsize = "0.3" -num-traits = "0.1.32" -rustc-serialize = "0.3" -serde = "0.8" diff --git a/third_party/rust/app_units-0.3.0/README.md b/third_party/rust/app_units-0.3.0/README.md deleted file mode 100644 index fab29a33d721..000000000000 --- a/third_party/rust/app_units-0.3.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# app-units - -[Documentation](http://doc.servo.org/app_units/index.html) diff --git a/third_party/rust/app_units-0.3.0/src/app_unit.rs b/third_party/rust/app_units-0.3.0/src/app_unit.rs deleted file mode 100644 index 1679841c44cc..000000000000 --- a/third_party/rust/app_units-0.3.0/src/app_unit.rs +++ /dev/null @@ -1,315 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -use heapsize::HeapSizeOf; -use num_traits::Zero; -use rustc_serialize::{Encodable, Encoder}; -use serde::de::{Deserialize, Deserializer}; -use serde::ser::{Serialize, Serializer}; -use std::default::Default; -use std::fmt; -use std::i32; -use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Rem, Sub, SubAssign}; - -/// The number of app units in a pixel. -pub const AU_PER_PX: i32 = 60; - -#[derive(Clone, Copy, Hash, PartialEq, PartialOrd, Eq, Ord)] -pub struct Au(pub i32); - -impl HeapSizeOf for Au { - fn heap_size_of_children(&self) -> usize { 0 } -} - -impl Deserialize for Au { - fn deserialize(deserializer: &mut D) -> Result { - Ok(Au(try!(i32::deserialize(deserializer)))) - } -} - -impl Serialize for Au { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> { - self.0.serialize(serializer) - } -} - -impl Default for Au { - #[inline] - fn default() -> Au { - Au(0) - } -} - -impl Zero for Au { - #[inline] - fn zero() -> Au { - Au(0) - } - - #[inline] - fn is_zero(&self) -> bool { - self.0 == 0 - } -} - -pub const MIN_AU: Au = Au(i32::MIN); -pub const MAX_AU: Au = Au(i32::MAX); - -impl Encodable for Au { - fn encode(&self, e: &mut S) -> Result<(), S::Error> { - e.emit_f64(self.to_f64_px()) - } -} - -impl fmt::Debug for Au { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}px", self.to_f64_px()) - } -} - -impl Add for Au { - type Output = Au; - - #[inline] - fn add(self, other: Au) -> Au { - Au(self.0.wrapping_add(other.0)) - } -} - -impl Sub for Au { - type Output = Au; - - #[inline] - fn sub(self, other: Au) -> Au { - Au(self.0.wrapping_sub(other.0)) - } - -} - -impl Mul for Au { - type Output = Au; - - #[inline] - fn mul(self, other: i32) -> Au { - Au(self.0.wrapping_mul(other)) - } -} - -impl Div for Au { - type Output = Au; - - #[inline] - fn div(self, other: i32) -> Au { - Au(self.0 / other) - } -} - -impl Rem for Au { - type Output = Au; - - #[inline] - fn rem(self, other: i32) -> Au { - Au(self.0 % other) - } -} - -impl Neg for Au { - type Output = Au; - - #[inline] - fn neg(self) -> Au { - Au(-self.0) - } -} - -impl AddAssign for Au { - #[inline] - fn add_assign(&mut self, other: Au) { - *self = *self + other; - } -} - -impl SubAssign for Au { - #[inline] - fn sub_assign(&mut self, other: Au) { - *self = *self - other; - } -} - -impl MulAssign for Au { - #[inline] - fn mul_assign(&mut self, other: i32) { - *self = *self * other; - } -} - -impl DivAssign for Au { - #[inline] - fn div_assign(&mut self, other: i32) { - *self = *self / other; - } -} - -impl Au { - /// FIXME(pcwalton): Workaround for lack of cross crate inlining of newtype structs! - #[inline] - pub fn new(value: i32) -> Au { - Au(value) - } - - #[inline] - pub fn scale_by(self, factor: f32) -> Au { - Au(((self.0 as f32) * factor) as i32) - } - - #[inline] - pub fn from_px(px: i32) -> Au { - Au((px * AU_PER_PX) as i32) - } - - /// Rounds this app unit down to the pixel towards zero and returns it. - #[inline] - pub fn to_px(self) -> i32 { - self.0 / AU_PER_PX - } - - /// Ceil this app unit to the appropriate pixel boundary and return it. - #[inline] - pub fn ceil_to_px(self) -> i32 { - ((self.0 as f64) / (AU_PER_PX as f64)).ceil() as i32 - } - - #[inline] - pub fn to_nearest_px(self) -> i32 { - ((self.0 as f64) / (AU_PER_PX as f64)).round() as i32 - } - - #[inline] - pub fn to_nearest_pixel(self, pixels_per_px: f32) -> f32 { - ((self.0 as f32) / (AU_PER_PX as f32) * pixels_per_px).round() / pixels_per_px - } - - #[inline] - pub fn to_f32_px(self) -> f32 { - (self.0 as f32) / (AU_PER_PX as f32) - } - - #[inline] - pub fn to_f64_px(self) -> f64 { - (self.0 as f64) / (AU_PER_PX as f64) - } - - #[inline] - pub fn from_f32_px(px: f32) -> Au { - Au((px * (AU_PER_PX as f32)) as i32) - } - - #[inline] - pub fn from_f64_px(px: f64) -> Au { - Au((px * (AU_PER_PX as f64)) as i32) - } -} - -#[test] -fn create() { - assert_eq!(Au::zero(), Au(0)); - assert_eq!(Au::default(), Au(0)); - assert_eq!(Au::new(7), Au(7)); -} - -#[test] -fn operations() { - assert_eq!(Au(7) + Au(5), Au(12)); - assert_eq!(MAX_AU + Au(1), MIN_AU); - - assert_eq!(Au(7) - Au(5), Au(2)); - assert_eq!(MIN_AU - Au(1), MAX_AU); - - assert_eq!(Au(7) * 5, Au(35)); - assert_eq!(MAX_AU * -1, MIN_AU + Au(1)); - assert_eq!(MIN_AU * -1, MIN_AU); - - assert_eq!(Au(35) / 5, Au(7)); - assert_eq!(Au(35) % 6, Au(5)); - - assert_eq!(-Au(7), Au(-7)); -} - -#[test] -#[should_panic] -fn overflowing_div() { - MIN_AU / -1; -} - -#[test] -#[should_panic] -fn overflowing_rem() { - MIN_AU % -1; -} - -#[test] -fn scale() { - assert_eq!(Au(12).scale_by(1.5), Au(18)); -} - -#[test] -fn convert() { - assert_eq!(Au::from_px(5), Au(300)); - - assert_eq!(Au(300).to_px(), 5); - assert_eq!(Au(330).to_px(), 5); - assert_eq!(Au(350).to_px(), 5); - assert_eq!(Au(360).to_px(), 6); - - assert_eq!(Au(300).ceil_to_px(), 5); - assert_eq!(Au(310).ceil_to_px(), 6); - assert_eq!(Au(330).ceil_to_px(), 6); - assert_eq!(Au(350).ceil_to_px(), 6); - assert_eq!(Au(360).ceil_to_px(), 6); - - assert_eq!(Au(300).to_nearest_px(), 5); - assert_eq!(Au(310).to_nearest_px(), 5); - assert_eq!(Au(330).to_nearest_px(), 6); - assert_eq!(Au(350).to_nearest_px(), 6); - assert_eq!(Au(360).to_nearest_px(), 6); - - assert_eq!(Au(60).to_nearest_pixel(2.), 1.); - assert_eq!(Au(70).to_nearest_pixel(2.), 1.); - assert_eq!(Au(80).to_nearest_pixel(2.), 1.5); - assert_eq!(Au(90).to_nearest_pixel(2.), 1.5); - assert_eq!(Au(100).to_nearest_pixel(2.), 1.5); - assert_eq!(Au(110).to_nearest_pixel(2.), 2.); - assert_eq!(Au(120).to_nearest_pixel(2.), 2.); - - assert_eq!(Au(300).to_f32_px(), 5.); - assert_eq!(Au(312).to_f32_px(), 5.2); - assert_eq!(Au(330).to_f32_px(), 5.5); - assert_eq!(Au(348).to_f32_px(), 5.8); - assert_eq!(Au(360).to_f32_px(), 6.); - - assert_eq!(Au(300).to_f64_px(), 5.); - assert_eq!(Au(312).to_f64_px(), 5.2); - assert_eq!(Au(330).to_f64_px(), 5.5); - assert_eq!(Au(348).to_f64_px(), 5.8); - assert_eq!(Au(360).to_f64_px(), 6.); - - assert_eq!(Au::from_f32_px(5.), Au(300)); - assert_eq!(Au::from_f32_px(5.2), Au(312)); - assert_eq!(Au::from_f32_px(5.5), Au(330)); - assert_eq!(Au::from_f32_px(5.8), Au(348)); - assert_eq!(Au::from_f32_px(6.), Au(360)); - - assert_eq!(Au::from_f64_px(5.), Au(300)); - assert_eq!(Au::from_f64_px(5.2), Au(312)); - assert_eq!(Au::from_f64_px(5.5), Au(330)); - assert_eq!(Au::from_f64_px(5.8), Au(348)); - assert_eq!(Au::from_f64_px(6.), Au(360)); -} - -#[test] -fn heapsize() { - use heapsize::HeapSizeOf; - fn f(_: T) {} - f(Au::new(0)); -} diff --git a/third_party/rust/app_units-0.3.0/src/lib.rs b/third_party/rust/app_units-0.3.0/src/lib.rs deleted file mode 100644 index 359b85cd75d2..000000000000 --- a/third_party/rust/app_units-0.3.0/src/lib.rs +++ /dev/null @@ -1,16 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -//! An Au is an "App Unit" and represents 1/60th of a CSS pixel. It was -//! originally proposed in 2002 as a standard unit of measure in Gecko. -//! See https://bugzilla.mozilla.org/show_bug.cgi?id=177805 for more info. - -extern crate heapsize; -extern crate num_traits; -extern crate rustc_serialize; -extern crate serde; - -mod app_unit; - -pub use app_unit::{Au, MIN_AU, MAX_AU, AU_PER_PX}; diff --git a/third_party/rust/bincode/.cargo-checksum.json b/third_party/rust/bincode/.cargo-checksum.json index e869625e964a..9fc983e81e3f 100644 --- a/third_party/rust/bincode/.cargo-checksum.json +++ b/third_party/rust/bincode/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"e084df3ce631ce22082bd63f9e421e7f4d7a2408d6520de532f6a649e4d320dd",".travis.yml":"cb3f687453522852cb74371892a77d5e6eb61d771b8ef27f6cc6628e556de3d6","Cargo.toml":"d631ecb2eef5a18307a68e795080ed073851c9bea0800405cad98642ed3cc053","LICENSE.md":"90d7e062634054e6866d3c81e6a2b3058a840e6af733e98e80bdfe1a7dec6912","examples/basic.rs":"cdf97f2c4facbc202bf9e1496030d09bef3b7cd5538407325a38f0fe2e49415e","logo.png":"ebc5305aae938c1f834cf35302faa8be0f1b7b8c3c3beef5cf6b2f68b9628c35","readme.dev.md":"43bad3bcc13a5c057344d3ba7f64bd2b313f8c133d6afa068108df73e8e8facd","readme.md":"1fe1bda36327400cfedfcf103d58091c8465067b62706b0a368d287ca0312cd9","src/lib.rs":"1a85a12afad0b6150b8dbede093d19f4a32a3cd6976ee018a625fbc05051bf80","src/refbox.rs":"f0470baabbf0f9852df939c2535865793dc31c9d9d35eecf9c237a9df431a9fc","src/rustc_serialize/mod.rs":"188f5ff7fc9c5e0ac1404b919ceafac5ce4385950d22ae470ddc1775d2a0643b","src/rustc_serialize/reader.rs":"7983c37556fdef552bfeba386d557863fb5113c8fada55d4cf6a605f13214253","src/rustc_serialize/writer.rs":"684844799673fce3c54f1aca42430b6730da13473d732ee2954ebc56994ebd95","src/serde/mod.rs":"7818bbe5c320af2a15762c421d5471865a7364e1c9754c57960402fdcf09c595","src/serde/reader.rs":"1f88a55923dfc3ad82ec32571c9c7ca42818d996897966dea08a595f804d117f","src/serde/writer.rs":"d987134b3a00eb17a25e601757ad20607dd1de8989452266e9e4e7955fcd87f1","tests/test.rs":"b72a5902be11c3210dd56814276ff036155eba10d5f0aa566c86e7a1ce463adf"},"package":"55eb0b7fd108527b0c77860f75eca70214e11a8b4c6ef05148c54c05a25d48ad"} \ No newline at end of file +{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"e084df3ce631ce22082bd63f9e421e7f4d7a2408d6520de532f6a649e4d320dd",".travis.yml":"f705a11b487bf71c41ebd8223cc1f3cbde0dfdfeea96a100af55e06e93397a1b","Cargo.toml":"c1d0f68b42bff71b04c8e763f13b0141f30dc849bee5b0ab5b9008e3627aac99","LICENSE.md":"90d7e062634054e6866d3c81e6a2b3058a840e6af733e98e80bdfe1a7dec6912","changelist.org":"90bb4036f90c3792c8294de2e3d52a54cc6230c3e5dc78013a781a9aa468f5f3","examples/basic.rs":"57aeca11d5cc5c3d5bb613e78b2ea43a2e80d66c15a2fffae303b165aa4ab41d","logo.png":"ebc5305aae938c1f834cf35302faa8be0f1b7b8c3c3beef5cf6b2f68b9628c35","readme.dev.md":"43bad3bcc13a5c057344d3ba7f64bd2b313f8c133d6afa068108df73e8e8facd","readme.md":"1fe1bda36327400cfedfcf103d58091c8465067b62706b0a368d287ca0312cd9","src/lib.rs":"04d6e4533f4bbb2ce2126bca414f95610075642b223f4e0c0b8f7a573792d7fd","src/refbox.rs":"fe266cec4f9f36942a1a9a9ad094a4bb1003d0c0f3c070cfb6214790d0f21b69","src/serde/mod.rs":"ef0c0a55936d835ae756d84a6ac38de312687d7c0f2cfc6810ec994413464516","src/serde/reader.rs":"6bfde2e2df9b450f6c07576198e47fdc837bbc4ddc74f447c72875c188c72ddc","src/serde/writer.rs":"eb3b439e8822871d715464ef6aca4b93a73b2b57625f9c586b68007f7386ab12","tests/test.rs":"f009e979fda892ad531ddd0f2003f0a7df607b19bd453a53f87c9041dfd9c745"},"package":"62650bb5651ba8f0580cebf4ef255d791b8b0ef53800322661e1bb5791d42966"} \ No newline at end of file diff --git a/third_party/rust/bincode/.travis.yml b/third_party/rust/bincode/.travis.yml index 23b588ed4a3a..35b04d501b6f 100644 --- a/third_party/rust/bincode/.travis.yml +++ b/third_party/rust/bincode/.travis.yml @@ -1,29 +1,5 @@ -lang: c -after_success: | - [ $TRAVIS_BRANCH = master ] && - [ $TRAVIS_PULL_REQUEST = false ] && - cargo doc && - echo "" > target/doc/index.html && - sudo pip install ghp-import && - ghp-import -n target/doc && - git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages - -env: - matrix: - - CHANNEL='stable' - - CHANNEL='beta' - - CHANNEL='nightly' - global: - - secure: SZSxNqg9wiGx8EnJhifJ2kb/aCRcLim9TzTQyfurPqd8qVGkDOeVjTtbs+VTxLVXYtMJAz+YYnrQDwsu8kc/uYpQajU+gRMqNGEP5gNj3Ha5iNGDasAS6piIHQSMROayZ+D9g22nlGnjk8t9eZtLHC/Z8IWMCnjcIHvqMFY6cgI= - -install: - - curl -sf https://raw.githubusercontent.com/brson/multirust/master/blastoff.sh > ./rustup.sh - - chmod +x ./rustup.sh - - ./rustup.sh --yes - -script: - - multirust default $CHANNEL - - cargo build - - cargo build --no-default-features --features "rustc-serialize" - - cargo build --no-default-features --features "serde" - - if [ $CHANNEL = 'nightly' ] ; then cargo test ; fi +language: rust +rust: + - stable + - beta + - nightly diff --git a/third_party/rust/bincode/Cargo.toml b/third_party/rust/bincode/Cargo.toml index 3b8bdb3f89ed..afc9289a1635 100644 --- a/third_party/rust/bincode/Cargo.toml +++ b/third_party/rust/bincode/Cargo.toml @@ -1,29 +1,21 @@ [package] name = "bincode" -version = "0.6.1" -authors = ["Ty Overby ", "Francesco Mazzoli "] +version = "1.0.0-alpha2" +authors = ["Ty Overby ", "Francesco Mazzoli ", "David Tolnay ", "Daniel Griffen"] repository = "https://github.com/TyOverby/bincode" -documentation = "http://tyoverby.github.io/bincode/bincode/" +documentation = "https://docs.rs/bincode" keywords = ["binary", "encode", "decode", "serialize", "deserialize"] license = "MIT" -description = "A binary serialization / deserialization strategy and implementation with serde and rustc-serialize backends." +description = "A binary serialization / deserialization strategy that uses Serde for transforming structs into bytes and vice versa!" [dependencies] byteorder = "1.0.0" num-traits = "0.1.32" -[dependencies.rustc-serialize] -version = "0.3.*" -optional = true - [dependencies.serde] -version = "0.8.*" -optional = true +version = "0.9.*" [dev-dependencies] -serde_derive = "0.8.*" - -[features] -default = ["rustc-serialize", "serde"] +serde_derive = "0.9.*" diff --git a/third_party/rust/bincode/changelist.org b/third_party/rust/bincode/changelist.org new file mode 100644 index 000000000000..761068bf6991 --- /dev/null +++ b/third_party/rust/bincode/changelist.org @@ -0,0 +1,18 @@ +* 1.0.0 +** Removed depricated rustc-serialize support + Rustc-serialize was a stopgap until projects like Serde were able to catch up. + With macros stabilization on its way, we are able to switch to serde without any + big user-friendliness issues. Major congratulations to Serde for coming this far! + +** Moved Refbox, Strbox and Slicebox into a "refbox" module + Refbox, Strbox and Slicebox are still an integral piece of bincode, but since + they are mainly used by power-users, this move will make the crate API more organized + and easier for new users to understand. + +** Upgraded to Serde 0.9.* + Serde 0.9.* gives us a better API surface area and allows use of procedural macros for + deriving serialize and deserialize implemenetations. + +** Moved serde functions into global module + Since serde is the only supported serialization mechanism, it makes sense to have these + functions available at the top level. diff --git a/third_party/rust/bincode/examples/basic.rs b/third_party/rust/bincode/examples/basic.rs index 670f6bc0aafb..c5d9d3e40273 100644 --- a/third_party/rust/bincode/examples/basic.rs +++ b/third_party/rust/bincode/examples/basic.rs @@ -1,5 +1,6 @@ +/* extern crate bincode; -extern crate rustc_serialize; +extern crate use bincode::SizeLimit; use bincode::rustc_serialize::{encode, decode}; @@ -29,3 +30,6 @@ fn main() { assert!(world == decoded); } + */ + +fn main() {} diff --git a/third_party/rust/bincode/src/lib.rs b/third_party/rust/bincode/src/lib.rs index 138a9e08e9fd..c76e21927d5b 100644 --- a/third_party/rust/bincode/src/lib.rs +++ b/third_party/rust/bincode/src/lib.rs @@ -16,17 +16,16 @@ //! ### Using Basic Functions //! //! ```rust -//! #![allow(unstable)] //! extern crate bincode; -//! use bincode::rustc_serialize::{encode, decode}; +//! use bincode::{serialize, deserialize}; //! fn main() { //! // The object that we will serialize. //! let target = Some("hello world".to_string()); //! // The maximum size of the encoded message. //! let limit = bincode::SizeLimit::Bounded(20); //! -//! let encoded: Vec = encode(&target, limit).unwrap(); -//! let decoded: Option = decode(&encoded[..]).unwrap(); +//! let encoded: Vec = serialize(&target, limit).unwrap(); +//! let decoded: Option = deserialize(&encoded[..]).unwrap(); //! assert_eq!(target, decoded); //! } //! ``` @@ -37,21 +36,14 @@ #![doc(html_logo_url = "./icon.png")] -#[cfg(feature = "rustc-serialize")] -extern crate rustc_serialize as rustc_serialize_crate; extern crate byteorder; extern crate num_traits; -#[cfg(feature = "serde")] extern crate serde as serde_crate; +pub mod refbox; +mod serde; -pub use refbox::{RefBox, StrBox, SliceBox}; - -mod refbox; -#[cfg(feature = "rustc-serialize")] -pub mod rustc_serialize; -#[cfg(feature = "serde")] -pub mod serde; +pub use serde::*; /// A limit on the amount of bytes that can be read or written. /// @@ -76,4 +68,3 @@ pub enum SizeLimit { Infinite, Bounded(u64) } - diff --git a/third_party/rust/bincode/src/refbox.rs b/third_party/rust/bincode/src/refbox.rs index fb9112416dc2..be663f979eb6 100644 --- a/third_party/rust/bincode/src/refbox.rs +++ b/third_party/rust/bincode/src/refbox.rs @@ -1,10 +1,6 @@ use std::boxed::Box; use std::ops::Deref; -#[cfg(feature = "rustc-serialize")] -use rustc_serialize_crate::{Encodable, Encoder, Decodable, Decoder}; - -#[cfg(feature = "serde")] use serde_crate as serde; /// A struct for encoding nested reference types. @@ -141,35 +137,18 @@ impl RefBox<'static, T> { } } -#[cfg(feature = "rustc-serialize")] -impl <'a, T: Encodable> Encodable for RefBox<'a, T> { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - self.inner.encode(s) - } -} - -#[cfg(feature = "rustc-serialize")] -impl Decodable for RefBox<'static, T> { - fn decode(d: &mut D) -> Result, D::Error> { - let inner = try!(Decodable::decode(d)); - Ok(RefBox{inner: inner}) - } -} - -#[cfg(feature = "serde")] impl<'a, T> serde::Serialize for RefBox<'a, T> where T: serde::Serialize, { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { serde::Serialize::serialize(&self.inner, serializer) } } -#[cfg(feature = "serde")] impl<'a, T: serde::Deserialize> serde::Deserialize for RefBox<'a, T> { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: serde::Deserializer { let inner = try!(serde::Deserialize::deserialize(deserializer)); @@ -239,33 +218,17 @@ impl StrBox<'static> { } } -#[cfg(feature = "rustc-serialize")] -impl <'a> Encodable for StrBox<'a> { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - self.inner.encode(s) - } -} -#[cfg(feature = "rustc-serialize")] -impl Decodable for StrBox<'static> { - fn decode(d: &mut D) -> Result, D::Error> { - let inner: RefBoxInner<'static, str, String> = try!(Decodable::decode(d)); - Ok(StrBox{inner: inner}) - } -} - -#[cfg(feature = "serde")] impl<'a> serde::Serialize for StrBox<'a> { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { serde::Serialize::serialize(&self.inner, serializer) } } -#[cfg(feature = "serde")] impl serde::Deserialize for StrBox<'static> { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: serde::Deserializer { let inner = try!(serde::Deserialize::deserialize(deserializer)); @@ -330,35 +293,19 @@ impl SliceBox<'static, T> { } } -#[cfg(feature = "rustc-serialize")] -impl <'a, T: Encodable> Encodable for SliceBox<'a, T> { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - self.inner.encode(s) - } -} -#[cfg(feature = "rustc-serialize")] -impl Decodable for SliceBox<'static, T> { - fn decode(d: &mut D) -> Result, D::Error> { - let inner: RefBoxInner<'static, [T], Vec> = try!(Decodable::decode(d)); - Ok(SliceBox{inner: inner}) - } -} - -#[cfg(feature = "serde")] impl<'a, T> serde::Serialize for SliceBox<'a, T> where T: serde::Serialize, { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { serde::Serialize::serialize(&self.inner, serializer) } } -#[cfg(feature = "serde")] impl<'a, T: serde::Deserialize> serde::Deserialize for SliceBox<'a, T> { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: serde::Deserializer { let inner = try!(serde::Deserialize::deserialize(deserializer)); @@ -366,22 +313,12 @@ impl<'a, T: serde::Deserialize> serde::Deserialize for SliceBox<'a, T> { } } -#[cfg(feature = "rustc-serialize")] -impl <'a, A: Encodable + ?Sized, B: Encodable> Encodable for RefBoxInner<'a, A, B> { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - match self { - &RefBoxInner::Ref(ref r) => r.encode(s), - &RefBoxInner::Box(ref b) => b.encode(s) - } - } -} -#[cfg(feature = "serde")] impl<'a, A: ?Sized, B> serde::Serialize for RefBoxInner<'a, A, B> where A: serde::Serialize, B: serde::Serialize, { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: serde::Serializer { match self { @@ -391,19 +328,11 @@ impl<'a, A: ?Sized, B> serde::Serialize for RefBoxInner<'a, A, B> } } -#[cfg(feature = "rustc-serialize")] -impl Decodable for RefBoxInner<'static, A, B> { - fn decode(d: &mut D) -> Result, D::Error> { - let decoded = try!(Decodable::decode(d)); - Ok(RefBoxInner::Box(decoded)) - } -} -#[cfg(feature = "serde")] impl<'a, A: ?Sized, B> serde::Deserialize for RefBoxInner<'a, A, B> where B: serde::Deserialize, { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: serde::Deserializer { let deserialized = try!(serde::Deserialize::deserialize(deserializer)); diff --git a/third_party/rust/bincode/src/rustc_serialize/mod.rs b/third_party/rust/bincode/src/rustc_serialize/mod.rs deleted file mode 100644 index 2b75e804bcc7..000000000000 --- a/third_party/rust/bincode/src/rustc_serialize/mod.rs +++ /dev/null @@ -1,102 +0,0 @@ -//! A collection of serialization and deserialization functions -//! that use the `rustc_serialize` crate for the encodable and decodable -//! implementation. - -use rustc_serialize_crate::{Encodable, Decodable}; -use std::io::{Write, Read}; -use ::SizeLimit; - -pub use self::writer::{SizeChecker, EncoderWriter, EncodingResult, EncodingError}; -pub use self::reader::{DecoderReader, DecodingResult, DecodingError, InvalidEncoding}; - -mod reader; -mod writer; - -/// Encodes an encodable object into a `Vec` of bytes. -/// -/// If the encoding would take more bytes than allowed by `size_limit`, -/// an error is returned. -pub fn encode(t: &T, size_limit: SizeLimit) -> EncodingResult> { - // Since we are putting values directly into a vector, we can do size - // computation out here and pre-allocate a buffer of *exactly* - // the right size. - let mut w = if let SizeLimit::Bounded(l) = size_limit { - let actual_size = encoded_size_bounded(t, l); - let actual_size = try!(actual_size.ok_or(EncodingError::SizeLimit)); - Vec::with_capacity(actual_size as usize) - } else { - vec![] - }; - - match encode_into(t, &mut w, SizeLimit::Infinite) { - Ok(()) => Ok(w), - Err(e) => Err(e) - } -} - -/// Decodes a slice of bytes into an object. -/// -/// This method does not have a size-limit because if you already have the bytes -/// in memory, then you don't gain anything by having a limiter. -pub fn decode(b: &[u8]) -> DecodingResult { - let mut b = b; - decode_from(&mut b, SizeLimit::Infinite) -} - -/// Encodes an object directly into a `Writer`. -/// -/// If the encoding would take more bytes than allowed by `size_limit`, an error -/// is returned and *no bytes* will be written into the `Writer`. -/// -/// If this returns an `EncodingError` (other than SizeLimit), assume that the -/// writer is in an invalid state, as writing could bail out in the middle of -/// encoding. -pub fn encode_into(t: &T, - w: &mut W, - size_limit: SizeLimit) - -> EncodingResult<()> { - try!(match size_limit { - SizeLimit::Infinite => Ok(()), - SizeLimit::Bounded(x) => { - let mut size_checker = SizeChecker::new(x); - t.encode(&mut size_checker) - } - }); - - t.encode(&mut writer::EncoderWriter::new(w)) -} - -/// Decoes an object directly from a `Buffer`ed Reader. -/// -/// If the provided `SizeLimit` is reached, the decode will bail immediately. -/// A SizeLimit can help prevent an attacker from flooding your server with -/// a neverending stream of values that runs your server out of memory. -/// -/// If this returns an `DecodingError`, assume that the buffer that you passed -/// in is in an invalid state, as the error could be returned during any point -/// in the reading. -pub fn decode_from(r: &mut R, size_limit: SizeLimit) -> DecodingResult { - Decodable::decode(&mut reader::DecoderReader::new(r, size_limit)) -} - - -/// Returns the size that an object would be if encoded using bincode. -/// -/// This is used internally as part of the check for encode_into, but it can -/// be useful for preallocating buffers if thats your style. -pub fn encoded_size(t: &T) -> u64 { - use std::u64::MAX; - let mut size_checker = SizeChecker::new(MAX); - t.encode(&mut size_checker).ok(); - size_checker.written -} - -/// Given a maximum size limit, check how large an object would be if it -/// were to be encoded. -/// -/// If it can be encoded in `max` or fewer bytes, that number will be returned -/// inside `Some`. If it goes over bounds, then None is returned. -pub fn encoded_size_bounded(t: &T, max: u64) -> Option { - let mut size_checker = SizeChecker::new(max); - t.encode(&mut size_checker).ok().map(|_| size_checker.written) -} diff --git a/third_party/rust/bincode/src/rustc_serialize/reader.rs b/third_party/rust/bincode/src/rustc_serialize/reader.rs deleted file mode 100644 index ba1fd31a5082..000000000000 --- a/third_party/rust/bincode/src/rustc_serialize/reader.rs +++ /dev/null @@ -1,392 +0,0 @@ -use std::io::Read; -use std::io::Error as IoError; -use std::error::Error; -use std::fmt; -use std::convert::From; - -use rustc_serialize_crate::Decoder; - -use byteorder::{BigEndian, ReadBytesExt}; -use ::SizeLimit; - -#[derive(Eq, PartialEq, Clone, Debug)] -pub struct InvalidEncoding { - pub desc: &'static str, - pub detail: Option, -} - -impl fmt::Display for InvalidEncoding { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match *self { - InvalidEncoding { detail: None, desc } => - write!(fmt, "{}", desc), - InvalidEncoding { detail: Some(ref detail), desc } => - write!(fmt, "{} ({})", desc, detail) - } - } -} - -/// An error that can be produced during decoding. -/// -/// If decoding from a Buffer, assume that the buffer has been left -/// in an invalid state. -#[derive(Debug)] -pub enum DecodingError { - /// If the error stems from the reader that is being used - /// during decoding, that error will be stored and returned here. - IoError(IoError), - /// If the bytes in the reader are not decodable because of an invalid - /// encoding, this error will be returned. This error is only possible - /// if a stream is corrupted. A stream produced from `encode` or `encode_into` - /// should **never** produce an InvalidEncoding error. - InvalidEncoding(InvalidEncoding), - /// If decoding a message takes more than the provided size limit, this - /// error is returned. - SizeLimit -} - -impl fmt::Display for DecodingError { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match *self { - DecodingError::IoError(ref ioerr) => - write!(fmt, "IoError: {}", ioerr), - DecodingError::InvalidEncoding(ref ib) => - write!(fmt, "InvalidEncoding: {}", ib), - DecodingError::SizeLimit => - write!(fmt, "SizeLimit") - } - } -} - -pub type DecodingResult = Result; - -fn wrap_io(err: IoError) -> DecodingError { - DecodingError::IoError(err) -} - -impl Error for DecodingError { - fn description(&self) -> &str { - match *self { - DecodingError::IoError(ref err) => Error::description(err), - DecodingError::InvalidEncoding(ref ib) => ib.desc, - DecodingError::SizeLimit => "the size limit for decoding has been reached" - } - } - - fn cause(&self) -> Option<&Error> { - match *self { - DecodingError::IoError(ref err) => err.cause(), - DecodingError::InvalidEncoding(_) => None, - DecodingError::SizeLimit => None - } - } -} - -impl From for DecodingError { - fn from(err: IoError) -> DecodingError { - DecodingError::IoError(err) - } -} - -/// A Decoder that reads bytes from a buffer. -/// -/// This struct should rarely be used. -/// In most cases, prefer the `decode_from` function. -/// -/// ```rust,ignore -/// let dr = bincode::rustc_serialize::DecoderReader::new(&mut some_reader, SizeLimit::Infinite); -/// let result: T = Decodable::decode(&mut dr); -/// let bytes_read = dr.bytes_read(); -/// ``` -pub struct DecoderReader<'a, R: 'a> { - reader: &'a mut R, - size_limit: SizeLimit, - read: u64 -} - -impl<'a, R: Read> DecoderReader<'a, R> { - pub fn new(r: &'a mut R, size_limit: SizeLimit) -> DecoderReader<'a, R> { - DecoderReader { - reader: r, - size_limit: size_limit, - read: 0 - } - } - - /// Returns the number of bytes read from the contained Reader. - pub fn bytes_read(&self) -> u64 { - self.read - } -} - -impl <'a, A> DecoderReader<'a, A> { - fn read_bytes(&mut self, count: u64) -> Result<(), DecodingError> { - self.read = match self.read.checked_add(count) { - Some(read) => read, - None => return Err(DecodingError::SizeLimit), - }; - match self.size_limit { - SizeLimit::Infinite => Ok(()), - SizeLimit::Bounded(x) if self.read <= x => Ok(()), - SizeLimit::Bounded(_) => Err(DecodingError::SizeLimit) - } - } - - fn read_type(&mut self) -> Result<(), DecodingError> { - use std::mem::size_of; - self.read_bytes(size_of::() as u64) - } -} - -impl<'a, R: Read> Decoder for DecoderReader<'a, R> { - type Error = DecodingError; - - fn read_nil(&mut self) -> DecodingResult<()> { - Ok(()) - } - fn read_usize(&mut self) -> DecodingResult { - Ok(try!(self.read_u64().map(|x| x as usize))) - } - fn read_u64(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_u64::().map_err(wrap_io) - } - fn read_u32(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_u32::().map_err(wrap_io) - } - fn read_u16(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_u16::().map_err(wrap_io) - } - fn read_u8(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_u8().map_err(wrap_io) - } - fn read_isize(&mut self) -> DecodingResult { - self.read_i64().map(|x| x as isize) - } - fn read_i64(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_i64::().map_err(wrap_io) - } - fn read_i32(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_i32::().map_err(wrap_io) - } - fn read_i16(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_i16::().map_err(wrap_io) - } - fn read_i8(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_i8().map_err(wrap_io) - } - fn read_bool(&mut self) -> DecodingResult { - let x = try!(self.read_i8()); - match x { - 1 => Ok(true), - 0 => Ok(false), - _ => Err(DecodingError::InvalidEncoding(InvalidEncoding{ - desc: "invalid u8 when decoding bool", - detail: Some(format!("Expected 0 or 1, got {}", x)) - })), - } - } - fn read_f64(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_f64::().map_err(wrap_io) - } - fn read_f32(&mut self) -> DecodingResult { - try!(self.read_type::()); - self.reader.read_f32::().map_err(wrap_io) - } - fn read_char(&mut self) -> DecodingResult { - use std::str; - - let error = DecodingError::InvalidEncoding(InvalidEncoding { - desc: "Invalid char encoding", - detail: None - }); - - let mut buf = [0]; - - let _ = try!(self.reader.read(&mut buf[..])); - let first_byte = buf[0]; - let width = utf8_char_width(first_byte); - if width == 1 { return Ok(first_byte as char) } - if width == 0 { return Err(error)} - - let mut buf = [first_byte, 0, 0, 0]; - { - let mut start = 1; - while start < width { - match try!(self.reader.read(&mut buf[start .. width])) { - n if n == width - start => break, - n if n < width - start => { start += n; } - _ => return Err(error) - } - } - } - - let res = try!(match str::from_utf8(&buf[..width]).ok() { - Some(s) => Ok(s.chars().next().unwrap()), - None => Err(error) - }); - - try!(self.read_bytes(res.len_utf8() as u64)); - Ok(res) - } - - fn read_str(&mut self) -> DecodingResult { - let len = try!(self.read_usize()); - try!(self.read_bytes(len as u64)); - - let mut buff = Vec::new(); - try!(self.reader.by_ref().take(len as u64).read_to_end(&mut buff)); - match String::from_utf8(buff) { - Ok(s) => Ok(s), - Err(err) => Err(DecodingError::InvalidEncoding(InvalidEncoding { - desc: "error while decoding utf8 string", - detail: Some(format!("Decoding error: {}", err)) - })), - } - } - fn read_enum(&mut self, _: &str, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_enum_variant(&mut self, names: &[&str], mut f: F) -> DecodingResult - where F: FnMut(&mut DecoderReader<'a, R>, usize) -> DecodingResult - { - let id = try!(self.read_u32()); - let id = id as usize; - if id >= names.len() { - Err(DecodingError::InvalidEncoding(InvalidEncoding { - desc: "out of bounds tag when reading enum variant", - detail: Some(format!("Expected tag < {}, got {}", names.len(), id)) - })) - } else { - f(self, id) - } - } - fn read_enum_variant_arg(&mut self, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_enum_struct_variant(&mut self, names: &[&str], f: F) -> DecodingResult - where F: FnMut(&mut DecoderReader<'a, R>, usize) -> DecodingResult - { - self.read_enum_variant(names, f) - } - fn read_enum_struct_variant_field(&mut self, - _: &str, - f_idx: usize, - f: F) - -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - self.read_enum_variant_arg(f_idx, f) - } - fn read_struct(&mut self, _: &str, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_struct_field(&mut self, _: &str, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_tuple(&mut self, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_tuple_arg(&mut self, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_tuple_struct(&mut self, _: &str, len: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - self.read_tuple(len, f) - } - fn read_tuple_struct_arg(&mut self, a_idx: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - self.read_tuple_arg(a_idx, f) - } - fn read_option(&mut self, mut f: F) -> DecodingResult - where F: FnMut(&mut DecoderReader<'a, R>, bool) -> DecodingResult - { - let x = try!(self.read_u8()); - match x { - 1 => f(self, true), - 0 => f(self, false), - _ => Err(DecodingError::InvalidEncoding(InvalidEncoding { - desc: "invalid tag when decoding Option", - detail: Some(format!("Expected 0 or 1, got {}", x)) - })), - } - } - fn read_seq(&mut self, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>, usize) -> DecodingResult - { - let len = try!(self.read_usize()); - f(self, len) - } - fn read_seq_elt(&mut self, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_map(&mut self, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>, usize) -> DecodingResult - { - let len = try!(self.read_usize()); - f(self, len) - } - fn read_map_elt_key(&mut self, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn read_map_elt_val(&mut self, _: usize, f: F) -> DecodingResult - where F: FnOnce(&mut DecoderReader<'a, R>) -> DecodingResult - { - f(self) - } - fn error(&mut self, err: &str) -> DecodingError { - DecodingError::InvalidEncoding(InvalidEncoding { - desc: "user-induced error", - detail: Some(err.to_string()), - }) - } -} - -static UTF8_CHAR_WIDTH: [u8; 256] = [ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x1F -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x3F -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x5F -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x7F -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x9F -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xBF -0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 0xDF -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 0xEF -4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0, // 0xFF -]; - -fn utf8_char_width(b: u8) -> usize { - UTF8_CHAR_WIDTH[b as usize] as usize -} diff --git a/third_party/rust/bincode/src/rustc_serialize/writer.rs b/third_party/rust/bincode/src/rustc_serialize/writer.rs deleted file mode 100644 index 2ab8da4aca9b..000000000000 --- a/third_party/rust/bincode/src/rustc_serialize/writer.rs +++ /dev/null @@ -1,422 +0,0 @@ -use std::io::Write; -use std::io::Error as IoError; -use std::error::Error; -use std::fmt; - -use rustc_serialize_crate::Encoder; - -use byteorder::{BigEndian, WriteBytesExt}; - -pub type EncodingResult = Result; - - -/// An error that can be produced during encoding. -#[derive(Debug)] -pub enum EncodingError { - /// An error originating from the underlying `Writer`. - IoError(IoError), - /// An object could not be encoded with the given size limit. - /// - /// This error is returned before any bytes are written to the - /// output `Writer`. - SizeLimit, -} - -/// An Encoder that encodes values directly into a Writer. -/// -/// This struct should not be used often. -/// For most cases, prefer the `encode_into` function. -pub struct EncoderWriter<'a, W: 'a> { - writer: &'a mut W, -} - -pub struct SizeChecker { - pub size_limit: u64, - pub written: u64 -} - -fn wrap_io(err: IoError) -> EncodingError { - EncodingError::IoError(err) -} - -impl fmt::Display for EncodingError { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - match *self { - EncodingError::IoError(ref err) => write!(f, "IoError: {}", err), - EncodingError::SizeLimit => write!(f, "SizeLimit") - } - } -} - -impl Error for EncodingError { - fn description(&self) -> &str { - match *self { - EncodingError::IoError(ref err) => Error::description(err), - EncodingError::SizeLimit => "the size limit for decoding has been reached" - } - } - - fn cause(&self) -> Option<&Error> { - match *self { - EncodingError::IoError(ref err) => err.cause(), - EncodingError::SizeLimit => None - } - } -} - -impl <'a, W: Write> EncoderWriter<'a, W> { - pub fn new(w: &'a mut W) -> EncoderWriter<'a, W> { - EncoderWriter { - writer: w, - } - } -} - -impl SizeChecker { - pub fn new(limit: u64) -> SizeChecker { - SizeChecker { - size_limit: limit, - written: 0 - } - } - - fn add_raw(&mut self, size: usize) -> EncodingResult<()> { - self.written += size as u64; - if self.written <= self.size_limit { - Ok(()) - } else { - Err(EncodingError::SizeLimit) - } - } - - fn add_value(&mut self, t: T) -> EncodingResult<()> { - use std::mem::size_of_val; - self.add_raw(size_of_val(&t)) - } -} - -impl<'a, W: Write> Encoder for EncoderWriter<'a, W> { - type Error = EncodingError; - - fn emit_nil(&mut self) -> EncodingResult<()> { - Ok(()) - } - fn emit_usize(&mut self, v: usize) -> EncodingResult<()> { - self.emit_u64(v as u64) - } - fn emit_u64(&mut self, v: u64) -> EncodingResult<()> { - self.writer.write_u64::(v).map_err(wrap_io) - } - fn emit_u32(&mut self, v: u32) -> EncodingResult<()> { - self.writer.write_u32::(v).map_err(wrap_io) - } - fn emit_u16(&mut self, v: u16) -> EncodingResult<()> { - self.writer.write_u16::(v).map_err(wrap_io) - } - fn emit_u8(&mut self, v: u8) -> EncodingResult<()> { - self.writer.write_u8(v).map_err(wrap_io) - } - fn emit_isize(&mut self, v: isize) -> EncodingResult<()> { - self.emit_i64(v as i64) - } - fn emit_i64(&mut self, v: i64) -> EncodingResult<()> { - self.writer.write_i64::(v).map_err(wrap_io) - } - fn emit_i32(&mut self, v: i32) -> EncodingResult<()> { - self.writer.write_i32::(v).map_err(wrap_io) - } - fn emit_i16(&mut self, v: i16) -> EncodingResult<()> { - self.writer.write_i16::(v).map_err(wrap_io) - } - fn emit_i8(&mut self, v: i8) -> EncodingResult<()> { - self.writer.write_i8(v).map_err(wrap_io) - } - fn emit_bool(&mut self, v: bool) -> EncodingResult<()> { - self.writer.write_u8(if v {1} else {0}).map_err(wrap_io) - } - fn emit_f64(&mut self, v: f64) -> EncodingResult<()> { - self.writer.write_f64::(v).map_err(wrap_io) - } - fn emit_f32(&mut self, v: f32) -> EncodingResult<()> { - self.writer.write_f32::(v).map_err(wrap_io) - } - fn emit_char(&mut self, v: char) -> EncodingResult<()> { - // TODO: change this back once unicode works - //let mut cbuf = [0; 4]; - //let sz = v.encode_utf8(&mut cbuf[..]).unwrap_or(0); - //let ptr = &cbuf[..sz]; - //self.writer.write_all(ptr).map_err(EncodingError::IoError) - - let mut inter = String::with_capacity(1); - inter.push(v); - self.writer.write_all(inter.as_bytes()).map_err(EncodingError::IoError) - } - fn emit_str(&mut self, v: &str) -> EncodingResult<()> { - try!(self.emit_usize(v.len())); - self.writer.write_all(v.as_bytes()).map_err(EncodingError::IoError) - } - fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_enum_variant(&mut self, _: &str, v_id: usize, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - let max_u32: u32 = ::std::u32::MAX; - if v_id > (max_u32 as usize) { - panic!("Variant tag doesn't fit in a u32") - } - try!(self.emit_u32(v_id as u32)); - f(self) - } - fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_enum_struct_variant(&mut self, - v_name: &str, - v_id: usize, - len: usize, - f: F) - -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - self.emit_enum_variant(v_name, v_id, len, f) - } - fn emit_enum_struct_variant_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_struct(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_struct_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_tuple(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_tuple_arg(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - self.emit_tuple(len, f) - } - fn emit_tuple_struct_arg(&mut self, f_idx: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - self.emit_tuple_arg(f_idx, f) - } - fn emit_option(&mut self, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_option_none(&mut self) -> EncodingResult<()> { - self.writer.write_u8(0).map_err(wrap_io) - } - fn emit_option_some(&mut self, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - try!(self.writer.write_u8(1).map_err(wrap_io)); - f(self) - } - fn emit_seq(&mut self, len: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - try!(self.emit_usize(len)); - f(self) - } - fn emit_seq_elt(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_map(&mut self, len: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - try!(self.emit_usize(len)); - f(self) - } - fn emit_map_elt_key(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - fn emit_map_elt_val(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut EncoderWriter<'a, W>) -> EncodingResult<()> - { - f(self) - } - -} - -impl Encoder for SizeChecker { - type Error = EncodingError; - - fn emit_nil(&mut self) -> EncodingResult<()> { - Ok(()) - } - fn emit_usize(&mut self, v: usize) -> EncodingResult<()> { - self.add_value(v as u64) - } - fn emit_u64(&mut self, v: u64) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_u32(&mut self, v: u32) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_u16(&mut self, v: u16) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_u8(&mut self, v: u8) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_isize(&mut self, v: isize) -> EncodingResult<()> { - self.add_value(v as i64) - } - fn emit_i64(&mut self, v: i64) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_i32(&mut self, v: i32) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_i16(&mut self, v: i16) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_i8(&mut self, v: i8) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_bool(&mut self, _: bool) -> EncodingResult<()> { - self.add_value(0 as u8) - } - fn emit_f64(&mut self, v: f64) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_f32(&mut self, v: f32) -> EncodingResult<()> { - self.add_value(v) - } - fn emit_char(&mut self, v: char) -> EncodingResult<()> { - self.add_raw(v.len_utf8()) - } - fn emit_str(&mut self, v: &str) -> EncodingResult<()> { - try!(self.add_value(0 as u64)); - self.add_raw(v.len()) - } - fn emit_enum(&mut self, __: &str, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_enum_variant(&mut self, _: &str, v_id: usize, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - try!(self.add_value(v_id as u32)); - f(self) - } - fn emit_enum_variant_arg(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_enum_struct_variant(&mut self, - _: &str, - _: usize, - _: usize, - f: F) - -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_enum_struct_variant_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_struct(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_struct_field(&mut self, _: &str, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_tuple(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_tuple_arg(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_tuple_struct(&mut self, _: &str, len: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - self.emit_tuple(len, f) - } - fn emit_tuple_struct_arg(&mut self, f_idx: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - self.emit_tuple_arg(f_idx, f) - } - fn emit_option(&mut self, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_option_none(&mut self) -> EncodingResult<()> { - self.add_value(0 as u8) - } - fn emit_option_some(&mut self, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - try!(self.add_value(1 as u8)); - f(self) - } - fn emit_seq(&mut self, len: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - try!(self.emit_usize(len)); - f(self) - } - fn emit_seq_elt(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_map(&mut self, len: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - try!(self.emit_usize(len)); - f(self) - } - fn emit_map_elt_key(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - fn emit_map_elt_val(&mut self, _: usize, f: F) -> EncodingResult<()> - where F: FnOnce(&mut SizeChecker) -> EncodingResult<()> - { - f(self) - } - -} diff --git a/third_party/rust/bincode/src/serde/mod.rs b/third_party/rust/bincode/src/serde/mod.rs index b6a30d417b45..3ac623a99a66 100644 --- a/third_party/rust/bincode/src/serde/mod.rs +++ b/third_party/rust/bincode/src/serde/mod.rs @@ -3,19 +3,16 @@ //! implementation. use std::io::{Write, Read}; +use std::io::Error as IoError; +use std::{error, fmt, result}; use ::SizeLimit; pub use self::reader::{ Deserializer, - DeserializeResult, - DeserializeError, - InvalidEncoding }; pub use self::writer::{ Serializer, - SerializeResult, - SerializeError, }; use self::writer::SizeChecker; @@ -25,16 +22,105 @@ use serde_crate as serde; mod reader; mod writer; +pub type Result = result::Result; + +/// An error that can be produced during (de)serializing. +/// +/// If decoding from a Buffer, assume that the buffer has been left +/// in an invalid state. +pub type Error = Box; + +#[derive(Debug)] +pub enum ErrorKind { + /// If the error stems from the reader/writer that is being used + /// during (de)serialization, that error will be stored and returned here. + IoError(IoError), + /// If the bytes in the reader are not decodable because of an invalid + /// encoding, this error will be returned. This error is only possible + /// if a stream is corrupted. A stream produced from `encode` or `encode_into` + /// should **never** produce an InvalidEncoding error. + InvalidEncoding{ + desc: &'static str, + detail: Option + }, + /// If (de)serializing a message takes more than the provided size limit, this + /// error is returned. + SizeLimit, + SequenceMustHaveLength, + Custom(String) +} + +impl error::Error for ErrorKind { + fn description(&self) -> &str { + match *self { + ErrorKind::IoError(ref err) => error::Error::description(err), + ErrorKind::InvalidEncoding{desc, ..} => desc, + ErrorKind::SequenceMustHaveLength => "bincode can't encode infinite sequences", + ErrorKind::SizeLimit => "the size limit for decoding has been reached", + ErrorKind::Custom(ref msg) => msg, + + } + } + + fn cause(&self) -> Option<&error::Error> { + match *self { + ErrorKind::IoError(ref err) => err.cause(), + ErrorKind::InvalidEncoding{..} => None, + ErrorKind::SequenceMustHaveLength => None, + ErrorKind::SizeLimit => None, + ErrorKind::Custom(_) => None, + } + } +} + +impl From for Error { + fn from(err: IoError) -> Error { + ErrorKind::IoError(err).into() + } +} + +impl fmt::Display for ErrorKind { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match *self { + ErrorKind::IoError(ref ioerr) => + write!(fmt, "IoError: {}", ioerr), + ErrorKind::InvalidEncoding{desc, detail: None}=> + write!(fmt, "InvalidEncoding: {}", desc), + ErrorKind::InvalidEncoding{desc, detail: Some(ref detail)}=> + write!(fmt, "InvalidEncoding: {} ({})", desc, detail), + ErrorKind::SequenceMustHaveLength => + write!(fmt, "Bincode can only encode sequences and maps that have a knowable size ahead of time."), + ErrorKind::SizeLimit => + write!(fmt, "SizeLimit"), + ErrorKind::Custom(ref s) => + s.fmt(fmt), + } + } +} + +impl serde::de::Error for Error { + fn custom(desc: T) -> Error { + ErrorKind::Custom(desc.to_string()).into() + } +} + +impl serde::ser::Error for Error { + fn custom(msg: T) -> Self { + ErrorKind::Custom(msg.to_string()).into() + } +} + /// Serializes an object directly into a `Writer`. /// /// If the serialization would take more bytes than allowed by `size_limit`, an error /// is returned and *no bytes* will be written into the `Writer`. /// -/// If this returns an `SerializeError` (other than SizeLimit), assume that the +/// If this returns an `Error` (other than SizeLimit), assume that the /// writer is in an invalid state, as writing could bail out in the middle of /// serializing. -pub fn serialize_into(writer: &mut W, value: &T, size_limit: SizeLimit) -> SerializeResult<()> - where W: Write, T: serde::Serialize, +pub fn serialize_into(writer: &mut W, value: &T, size_limit: SizeLimit) -> Result<()> + where W: Write, + T: serde::Serialize, { match size_limit { SizeLimit::Infinite => { } @@ -52,18 +138,15 @@ pub fn serialize_into(writer: &mut W, value: &T, size_limit: SizeLimit) -> /// /// If the serialization would take more bytes than allowed by `size_limit`, /// an error is returned. -pub fn serialize(value: &T, size_limit: SizeLimit) -> SerializeResult> - where T: serde::Serialize, +pub fn serialize(value: &T, size_limit: SizeLimit) -> Result> + where T: serde::Serialize { // Since we are putting values directly into a vector, we can do size // computation out here and pre-allocate a buffer of *exactly* // the right size. let mut writer = match size_limit { SizeLimit::Bounded(size_limit) => { - let actual_size = match serialized_size_bounded(value, size_limit) { - Some(actual_size) => actual_size, - None => { return Err(SerializeError::SizeLimit); } - }; + let actual_size = try!(serialized_size_bounded(value, size_limit).ok_or(ErrorKind::SizeLimit)); Vec::with_capacity(actual_size as usize) } SizeLimit::Infinite => Vec::new() @@ -77,7 +160,9 @@ pub fn serialize(value: &T, size_limit: SizeLimit) -> SerializeResult /// /// This is used internally as part of the check for encode_into, but it can /// be useful for preallocating buffers if thats your style. -pub fn serialized_size(value: &T) -> u64 { +pub fn serialized_size(value: &T) -> u64 + where T: serde::Serialize +{ use std::u64::MAX; let mut size_checker = SizeChecker::new(MAX); value.serialize(&mut size_checker).ok(); @@ -89,7 +174,9 @@ pub fn serialized_size(value: &T) -> u64 { /// /// If it can be serialized in `max` or fewer bytes, that number will be returned /// inside `Some`. If it goes over bounds, then None is returned. -pub fn serialized_size_bounded(value: &T, max: u64) -> Option { +pub fn serialized_size_bounded(value: &T, max: u64) -> Option + where T: serde::Serialize +{ let mut size_checker = SizeChecker::new(max); value.serialize(&mut size_checker).ok().map(|_| size_checker.written) } @@ -100,10 +187,10 @@ pub fn serialized_size_bounded(value: &T, max: u64) -> Opti /// A SizeLimit can help prevent an attacker from flooding your server with /// a neverending stream of values that runs your server out of memory. /// -/// If this returns an `DeserializeError`, assume that the buffer that you passed +/// If this returns an `Error`, assume that the buffer that you passed /// in is in an invalid state, as the error could be returned during any point /// in the reading. -pub fn deserialize_from(reader: &mut R, size_limit: SizeLimit) -> DeserializeResult +pub fn deserialize_from(reader: &mut R, size_limit: SizeLimit) -> Result where R: Read, T: serde::Deserialize, { @@ -115,7 +202,7 @@ pub fn deserialize_from(reader: &mut R, size_limit: SizeLimit) -> Deserial /// /// This method does not have a size-limit because if you already have the bytes /// in memory, then you don't gain anything by having a limiter. -pub fn deserialize(bytes: &[u8]) -> DeserializeResult +pub fn deserialize(bytes: &[u8]) -> Result where T: serde::Deserialize, { let mut reader = bytes; diff --git a/third_party/rust/bincode/src/serde/reader.rs b/third_party/rust/bincode/src/serde/reader.rs index 00ea18c8046e..cc7c0a5c1da7 100644 --- a/third_party/rust/bincode/src/serde/reader.rs +++ b/third_party/rust/bincode/src/serde/reader.rs @@ -1,113 +1,11 @@ use std::io::Read; -use std::io::Error as IoError; -use std::error::Error; -use std::fmt; -use std::convert::From; use byteorder::{BigEndian, ReadBytesExt}; -use num_traits; use serde_crate as serde; use serde_crate::de::value::ValueDeserializer; - +use serde_crate::de::Error as DeError; use ::SizeLimit; - -#[derive(Eq, PartialEq, Clone, Debug)] -pub struct InvalidEncoding { - pub desc: &'static str, - pub detail: Option, -} - -impl fmt::Display for InvalidEncoding { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match *self { - InvalidEncoding { detail: None, desc } => - write!(fmt, "{}", desc), - InvalidEncoding { detail: Some(ref detail), desc } => - write!(fmt, "{} ({})", desc, detail) - } - } -} - -/// An error that can be produced during decoding. -/// -/// If decoding from a Buffer, assume that the buffer has been left -/// in an invalid state. -#[derive(Debug)] -pub enum DeserializeError { - /// If the error stems from the reader that is being used - /// during decoding, that error will be stored and returned here. - IoError(IoError), - /// If the bytes in the reader are not decodable because of an invalid - /// encoding, this error will be returned. This error is only possible - /// if a stream is corrupted. A stream produced from `encode` or `encode_into` - /// should **never** produce an InvalidEncoding error. - InvalidEncoding(InvalidEncoding), - /// If decoding a message takes more than the provided size limit, this - /// error is returned. - SizeLimit, - Serde(serde::de::value::Error) -} - -impl Error for DeserializeError { - fn description(&self) -> &str { - match *self { - DeserializeError::IoError(ref err) => Error::description(err), - DeserializeError::InvalidEncoding(ref ib) => ib.desc, - DeserializeError::SizeLimit => "the size limit for decoding has been reached", - DeserializeError::Serde(ref s) => s.description(), - - } - } - - fn cause(&self) -> Option<&Error> { - match *self { - DeserializeError::IoError(ref err) => err.cause(), - DeserializeError::InvalidEncoding(_) => None, - DeserializeError::SizeLimit => None, - DeserializeError::Serde(ref s) => s.cause(), - } - } -} - -impl From for DeserializeError { - fn from(err: IoError) -> DeserializeError { - DeserializeError::IoError(err) - } -} - -impl From for DeserializeError { - fn from(err: serde::de::value::Error) -> DeserializeError { - DeserializeError::Serde(err) - } -} - -impl fmt::Display for DeserializeError { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match *self { - DeserializeError::IoError(ref ioerr) => - write!(fmt, "IoError: {}", ioerr), - DeserializeError::InvalidEncoding(ref ib) => - write!(fmt, "InvalidEncoding: {}", ib), - DeserializeError::SizeLimit => - write!(fmt, "SizeLimit"), - DeserializeError::Serde(ref s) => - s.fmt(fmt), - } - } -} - -impl serde::de::Error for DeserializeError { - fn custom>(desc: T) -> DeserializeError { - DeserializeError::Serde(serde::de::value::Error::Custom(desc.into())) - } - - fn end_of_stream() -> DeserializeError { - DeserializeError::Serde(serde::de::value::Error::EndOfStream) - } -} - -pub type DeserializeResult = Result; - +use super::{Result, Error, ErrorKind}; /// A Deserializer that reads bytes from a buffer. /// @@ -119,14 +17,14 @@ pub type DeserializeResult = Result; /// serde::Deserialize::deserialize(&mut deserializer); /// let bytes_read = d.bytes_read(); /// ``` -pub struct Deserializer<'a, R: 'a> { - reader: &'a mut R, +pub struct Deserializer { + reader: R, size_limit: SizeLimit, read: u64 } -impl<'a, R: Read> Deserializer<'a, R> { - pub fn new(r: &'a mut R, size_limit: SizeLimit) -> Deserializer<'a, R> { +impl Deserializer { + pub fn new(r: R, size_limit: SizeLimit) -> Deserializer { Deserializer { reader: r, size_limit: size_limit, @@ -139,39 +37,39 @@ impl<'a, R: Read> Deserializer<'a, R> { self.read } - fn read_bytes(&mut self, count: u64) -> Result<(), DeserializeError> { + fn read_bytes(&mut self, count: u64) -> Result<()> { self.read += count; match self.size_limit { SizeLimit::Infinite => Ok(()), SizeLimit::Bounded(x) if self.read <= x => Ok(()), - SizeLimit::Bounded(_) => Err(DeserializeError::SizeLimit) + SizeLimit::Bounded(_) => Err(ErrorKind::SizeLimit.into()) } } - fn read_type(&mut self) -> Result<(), DeserializeError> { + fn read_type(&mut self) -> Result<()> { use std::mem::size_of; self.read_bytes(size_of::() as u64) } - fn read_string(&mut self) -> DeserializeResult { - let len = try!(serde::Deserialize::deserialize(self)); + fn read_string(&mut self) -> Result { + let len = try!(serde::Deserialize::deserialize(&mut *self)); try!(self.read_bytes(len)); let mut buffer = Vec::new(); try!(self.reader.by_ref().take(len as u64).read_to_end(&mut buffer)); String::from_utf8(buffer).map_err(|err| - DeserializeError::InvalidEncoding(InvalidEncoding { + ErrorKind::InvalidEncoding{ desc: "error while decoding utf8 string", detail: Some(format!("Deserialize error: {}", err)) - })) + }.into()) } } macro_rules! impl_nums { ($ty:ty, $dser_method:ident, $visitor_method:ident, $reader_method:ident) => { #[inline] - fn $dser_method(&mut self, mut visitor: V) -> DeserializeResult + fn $dser_method(self, visitor: V) -> Result where V: serde::de::Visitor, { try!(self.read_type::<$ty>()); @@ -182,18 +80,18 @@ macro_rules! impl_nums { } -impl<'a, R: Read> serde::Deserializer for Deserializer<'a, R> { - type Error = DeserializeError; +impl<'a, R: Read> serde::Deserializer for &'a mut Deserializer { + type Error = Error; #[inline] - fn deserialize(&mut self, _visitor: V) -> DeserializeResult + fn deserialize(self, _visitor: V) -> Result where V: serde::de::Visitor, { let message = "bincode does not support Deserializer::deserialize"; - Err(DeserializeError::Serde(serde::de::value::Error::Custom(message.into()))) + Err(Error::custom(message)) } - fn deserialize_bool(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_bool(self, visitor: V) -> Result where V: serde::de::Visitor, { let value: u8 = try!(serde::Deserialize::deserialize(self)); @@ -201,10 +99,10 @@ impl<'a, R: Read> serde::Deserializer for Deserializer<'a, R> { 1 => visitor.visit_bool(true), 0 => visitor.visit_bool(false), value => { - Err(DeserializeError::InvalidEncoding(InvalidEncoding { + Err(ErrorKind::InvalidEncoding{ desc: "invalid u8 when decoding bool", detail: Some(format!("Expected 0 or 1, got {}", value)) - })) + }.into()) } } } @@ -220,7 +118,7 @@ impl<'a, R: Read> serde::Deserializer for Deserializer<'a, R> { #[inline] - fn deserialize_u8(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_u8(self, visitor: V) -> Result where V: serde::de::Visitor, { try!(self.read_type::()); @@ -228,52 +126,28 @@ impl<'a, R: Read> serde::Deserializer for Deserializer<'a, R> { } #[inline] - fn deserialize_usize(&mut self, mut visitor: V) -> DeserializeResult - where V: serde::de::Visitor, - { - try!(self.read_type::()); - let value = try!(self.reader.read_u64::()); - match num_traits::cast(value) { - Some(value) => visitor.visit_usize(value), - None => Err(DeserializeError::Serde(serde::de::value::Error::Custom("expected usize".into()))) - } - } - - #[inline] - fn deserialize_i8(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_i8(self, visitor: V) -> Result where V: serde::de::Visitor, { try!(self.read_type::()); visitor.visit_i8(try!(self.reader.read_i8())) } - #[inline] - fn deserialize_isize(&mut self, mut visitor: V) -> DeserializeResult - where V: serde::de::Visitor, - { - try!(self.read_type::()); - let value = try!(self.reader.read_i64::()); - match num_traits::cast(value) { - Some(value) => visitor.visit_isize(value), - None => Err(DeserializeError::Serde(serde::de::value::Error::Custom("expected isize".into()))), - } - } - - fn deserialize_unit(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_unit(self, visitor: V) -> Result where V: serde::de::Visitor, { visitor.visit_unit() } - fn deserialize_char(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_char(self, visitor: V) -> Result where V: serde::de::Visitor, { use std::str; - let error = DeserializeError::InvalidEncoding(InvalidEncoding { + let error = ErrorKind::InvalidEncoding{ desc: "Invalid char encoding", detail: None - }); + }.into(); let mut buf = [0]; @@ -303,245 +177,235 @@ impl<'a, R: Read> serde::Deserializer for Deserializer<'a, R> { visitor.visit_char(res) } - fn deserialize_str(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_str(self, visitor: V) -> Result where V: serde::de::Visitor, { visitor.visit_str(&try!(self.read_string())) } - fn deserialize_string(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_string(self, visitor: V) -> Result where V: serde::de::Visitor, { visitor.visit_string(try!(self.read_string())) } - fn deserialize_bytes(&mut self, visitor: V) -> DeserializeResult + fn deserialize_bytes(self, visitor: V) -> Result where V: serde::de::Visitor, { self.deserialize_seq(visitor) } - fn deserialize_enum(&mut self, - _enum: &'static str, - _variants: &'static [&'static str], - mut visitor: V) -> Result - where V: serde::de::EnumVisitor, - { - visitor.visit(self) - } - - fn deserialize_tuple(&mut self, - _len: usize, - mut visitor: V) -> DeserializeResult + fn deserialize_byte_buf(self, visitor: V) -> Result where V: serde::de::Visitor, { - struct TupleVisitor<'a, 'b: 'a, R: Read + 'b>(&'a mut Deserializer<'b, R>); + self.deserialize_seq(visitor) + } - impl<'a, 'b: 'a, R: Read + 'b> serde::de::SeqVisitor for TupleVisitor<'a, 'b, R> { - type Error = DeserializeError; + fn deserialize_enum(self, + _enum: &'static str, + _variants: &'static [&'static str], + visitor: V) -> Result + where V: serde::de::Visitor, + { + impl<'a, R: Read + 'a> serde::de::EnumVisitor for &'a mut Deserializer { + type Error = Error; + type Variant = Self; - fn visit(&mut self) -> Result, Self::Error> - where T: serde::de::Deserialize, + fn visit_variant_seed(self, seed: V) -> Result<(V::Value, Self::Variant)> + where V: serde::de::DeserializeSeed, { - let value = try!(serde::Deserialize::deserialize(self.0)); - Ok(Some(value)) + let idx: u32 = try!(serde::de::Deserialize::deserialize(&mut *self)); + let val: Result<_> = seed.deserialize(idx.into_deserializer()); + Ok((try!(val), self)) } + } - fn end(&mut self) -> Result<(), Self::Error> { - Ok(()) + visitor.visit_enum(self) + } + + fn deserialize_tuple(self, + _len: usize, + visitor: V) -> Result + where V: serde::de::Visitor, + { + struct TupleVisitor<'a, R: Read + 'a>(&'a mut Deserializer); + + impl<'a, 'b: 'a, R: Read + 'b> serde::de::SeqVisitor for TupleVisitor<'a, R> { + type Error = Error; + + fn visit_seed(&mut self, seed: T) -> Result> + where T: serde::de::DeserializeSeed, + { + let value = try!(serde::de::DeserializeSeed::deserialize(seed, &mut *self.0)); + Ok(Some(value)) } } visitor.visit_seq(TupleVisitor(self)) } - fn deserialize_seq_fixed_size(&mut self, - _: usize, - visitor: V) -> DeserializeResult + fn deserialize_seq_fixed_size(self, + len: usize, + visitor: V) -> Result where V: serde::de::Visitor, { - self.deserialize_seq(visitor) - } - - fn deserialize_option(&mut self, mut visitor: V) -> DeserializeResult - where V: serde::de::Visitor, - { - let value: u8 = try!(serde::de::Deserialize::deserialize(self)); - match value { - 0 => visitor.visit_none(), - 1 => visitor.visit_some(self), - _ => Err(DeserializeError::InvalidEncoding(InvalidEncoding { - desc: "invalid tag when decoding Option", - detail: Some(format!("Expected 0 or 1, got {}", value)) - })), - } - } - - fn deserialize_seq(&mut self, mut visitor: V) -> DeserializeResult - where V: serde::de::Visitor, - { - struct SeqVisitor<'a, 'b: 'a, R: Read + 'b> { - deserializer: &'a mut Deserializer<'b, R>, + struct SeqVisitor<'a, R: Read + 'a> { + deserializer: &'a mut Deserializer, len: usize, } - impl<'a, 'b: 'a, R: Read + 'b> serde::de::SeqVisitor for SeqVisitor<'a, 'b, R> { - type Error = DeserializeError; + impl<'a, 'b: 'a, R: Read + 'b> serde::de::SeqVisitor for SeqVisitor<'a, R> { + type Error = Error; - fn visit(&mut self) -> Result, Self::Error> - where T: serde::de::Deserialize, + fn visit_seed(&mut self, seed: T) -> Result> + where T: serde::de::DeserializeSeed, { if self.len > 0 { self.len -= 1; - let value = try!(serde::Deserialize::deserialize(self.deserializer)); + let value = try!(serde::de::DeserializeSeed::deserialize(seed, &mut *self.deserializer)); Ok(Some(value)) } else { Ok(None) } } - - fn end(&mut self) -> Result<(), Self::Error> { - if self.len == 0 { - Ok(()) - } else { - Err(DeserializeError::Serde(serde::de::value::Error::Custom("expected end".into()))) - } - } } - let len = try!(serde::Deserialize::deserialize(self)); - visitor.visit_seq(SeqVisitor { deserializer: self, len: len }) } - fn deserialize_map(&mut self, mut visitor: V) -> DeserializeResult + fn deserialize_option(self, visitor: V) -> Result where V: serde::de::Visitor, { - struct MapVisitor<'a, 'b: 'a, R: Read + 'b> { - deserializer: &'a mut Deserializer<'b, R>, + let value: u8 = try!(serde::de::Deserialize::deserialize(&mut *self)); + match value { + 0 => visitor.visit_none(), + 1 => visitor.visit_some(&mut *self), + _ => Err(ErrorKind::InvalidEncoding{ + desc: "invalid tag when decoding Option", + detail: Some(format!("Expected 0 or 1, got {}", value)) + }.into()), + } + } + + fn deserialize_seq(self, visitor: V) -> Result + where V: serde::de::Visitor, + { + let len = try!(serde::Deserialize::deserialize(&mut *self)); + + self.deserialize_seq_fixed_size(len, visitor) + } + + fn deserialize_map(self, visitor: V) -> Result + where V: serde::de::Visitor, + { + struct MapVisitor<'a, R: Read + 'a> { + deserializer: &'a mut Deserializer, len: usize, } - impl<'a, 'b: 'a, R: Read + 'b> serde::de::MapVisitor for MapVisitor<'a, 'b, R> { - type Error = DeserializeError; + impl<'a, 'b: 'a, R: Read + 'b> serde::de::MapVisitor for MapVisitor<'a, R> { + type Error = Error; - fn visit_key(&mut self) -> Result, Self::Error> - where K: serde::de::Deserialize, + fn visit_key_seed(&mut self, seed: K) -> Result> + where K: serde::de::DeserializeSeed, { if self.len > 0 { self.len -= 1; - let key = try!(serde::Deserialize::deserialize(self.deserializer)); + let key = try!(serde::de::DeserializeSeed::deserialize(seed, &mut *self.deserializer)); Ok(Some(key)) } else { Ok(None) } } - fn visit_value(&mut self) -> Result - where V: serde::de::Deserialize, + fn visit_value_seed(&mut self, seed: V) -> Result + where V: serde::de::DeserializeSeed, { - let value = try!(serde::Deserialize::deserialize(self.deserializer)); + let value = try!(serde::de::DeserializeSeed::deserialize(seed, &mut *self.deserializer)); Ok(value) } - - fn end(&mut self) -> Result<(), Self::Error> { - if self.len == 0 { - Ok(()) - } else { - Err(DeserializeError::Serde(serde::de::value::Error::Custom("expected end".into()))) - } - } } - let len = try!(serde::Deserialize::deserialize(self)); + let len = try!(serde::Deserialize::deserialize(&mut *self)); visitor.visit_map(MapVisitor { deserializer: self, len: len }) } - fn deserialize_struct(&mut self, + fn deserialize_struct(self, _name: &str, fields: &'static [&'static str], - visitor: V) -> DeserializeResult + visitor: V) -> Result where V: serde::de::Visitor, { self.deserialize_tuple(fields.len(), visitor) } - fn deserialize_struct_field(&mut self, - _visitor: V) -> DeserializeResult + fn deserialize_struct_field(self, + _visitor: V) -> Result where V: serde::de::Visitor, { let message = "bincode does not support Deserializer::deserialize_struct_field"; - Err(DeserializeError::Serde(serde::de::value::Error::Custom(message.into()))) + Err(Error::custom(message)) } - fn deserialize_newtype_struct(&mut self, + fn deserialize_newtype_struct(self, _name: &str, - mut visitor: V) -> DeserializeResult + visitor: V) -> Result where V: serde::de::Visitor, { visitor.visit_newtype_struct(self) } - fn deserialize_unit_struct(&mut self, + fn deserialize_unit_struct(self, _name: &'static str, - mut visitor: V) -> DeserializeResult + visitor: V) -> Result where V: serde::de::Visitor, { visitor.visit_unit() } - fn deserialize_tuple_struct(&mut self, + fn deserialize_tuple_struct(self, _name: &'static str, len: usize, - visitor: V) -> DeserializeResult + visitor: V) -> Result where V: serde::de::Visitor, { self.deserialize_tuple(len, visitor) } - fn deserialize_ignored_any(&mut self, - _visitor: V) -> DeserializeResult + fn deserialize_ignored_any(self, + _visitor: V) -> Result where V: serde::de::Visitor, { let message = "bincode does not support Deserializer::deserialize_ignored_any"; - Err(DeserializeError::Serde(serde::de::value::Error::Custom(message.into()))) + Err(Error::custom(message)) } } -impl<'a, R: Read> serde::de::VariantVisitor for Deserializer<'a, R> { - type Error = DeserializeError; +impl<'a, R: Read> serde::de::VariantVisitor for &'a mut Deserializer { + type Error = Error; - fn visit_variant(&mut self) -> Result - where V: serde::Deserialize, - { - let index: u32 = try!(serde::Deserialize::deserialize(self)); - let mut deserializer = (index as usize).into_deserializer(); - let attempt: Result = serde::Deserialize::deserialize(&mut deserializer); - Ok(try!(attempt)) - } - - fn visit_unit(&mut self) -> Result<(), Self::Error> { + fn visit_unit(self) -> Result<()> { Ok(()) } - fn visit_newtype(&mut self) -> Result - where T: serde::de::Deserialize, + fn visit_newtype_seed(self, seed: T) -> Result + where T: serde::de::DeserializeSeed, { - serde::de::Deserialize::deserialize(self) + serde::de::DeserializeSeed::deserialize(seed, self) } - fn visit_tuple(&mut self, + fn visit_tuple(self, len: usize, - visitor: V) -> Result + visitor: V) -> Result where V: serde::de::Visitor, { serde::de::Deserializer::deserialize_tuple(self, len, visitor) } - fn visit_struct(&mut self, + fn visit_struct(self, fields: &'static [&'static str], - visitor: V) -> Result + visitor: V) -> Result where V: serde::de::Visitor, { serde::de::Deserializer::deserialize_tuple(self, fields.len(), visitor) diff --git a/third_party/rust/bincode/src/serde/writer.rs b/third_party/rust/bincode/src/serde/writer.rs index 58666eb9f8f9..b44a6bfc16f5 100644 --- a/third_party/rust/bincode/src/serde/writer.rs +++ b/third_party/rust/bincode/src/serde/writer.rs @@ -1,6 +1,3 @@ -use std::error::Error; -use std::fmt; -use std::io::Error as IoError; use std::io::Write; use std::u32; @@ -8,77 +5,24 @@ use serde_crate as serde; use byteorder::{BigEndian, WriteBytesExt}; -pub type SerializeResult = Result; - - -/// An error that can be produced during encoding. -#[derive(Debug)] -pub enum SerializeError { - /// An error originating from the underlying `Writer`. - IoError(IoError), - /// An object could not be encoded with the given size limit. - /// - /// This error is returned before any bytes are written to the - /// output `Writer`. - SizeLimit, - /// A custom error message - Custom(String) -} +use super::{Result, Error, ErrorKind}; /// An Serializer that encodes values directly into a Writer. /// /// This struct should not be used often. /// For most cases, prefer the `encode_into` function. -pub struct Serializer<'a, W: 'a> { - writer: &'a mut W, +pub struct Serializer { + writer: W, } -fn wrap_io(err: IoError) -> SerializeError { - SerializeError::IoError(err) -} - -impl serde::ser::Error for SerializeError { - fn custom>(msg: T) -> Self { - SerializeError::Custom(msg.into()) - } -} - -impl fmt::Display for SerializeError { - fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { - match *self { - SerializeError::IoError(ref err) => write!(f, "IoError: {}", err), - SerializeError::Custom(ref s) => write!(f, "Custom Error {}", s), - SerializeError::SizeLimit => write!(f, "SizeLimit"), - } - } -} - -impl Error for SerializeError { - fn description(&self) -> &str { - match *self { - SerializeError::IoError(ref err) => Error::description(err), - SerializeError::SizeLimit => "the size limit for decoding has been reached", - SerializeError::Custom(_) => "a custom serialization error was reported", - } - } - - fn cause(&self) -> Option<&Error> { - match *self { - SerializeError::IoError(ref err) => err.cause(), - SerializeError::SizeLimit => None, - SerializeError::Custom(_) => None, - } - } -} - -impl<'a, W: Write> Serializer<'a, W> { - pub fn new(w: &'a mut W) -> Serializer<'a, W> { +impl Serializer { + pub fn new(w: W) -> Serializer { Serializer { writer: w, } } - fn add_enum_tag(&mut self, tag: usize) -> SerializeResult<()> { + fn add_enum_tag(&mut self, tag: usize) -> Result<()> { if tag > u32::MAX as usize { panic!("Variant tag doesn't fit in a u32") } @@ -87,240 +31,161 @@ impl<'a, W: Write> Serializer<'a, W> { } } -impl<'a, W: Write> serde::Serializer for Serializer<'a, W> { - type Error = SerializeError; - type SeqState = (); - type TupleState = (); - type TupleStructState = (); - type TupleVariantState = (); - type MapState = (); - type StructState = (); - type StructVariantState = (); +impl<'a, W: Write> serde::Serializer for &'a mut Serializer { + type Ok = (); + type Error = Error; + type SerializeSeq = Compound<'a, W>; + type SerializeTuple = Compound<'a, W>; + type SerializeTupleStruct = Compound<'a, W>; + type SerializeTupleVariant = Compound<'a, W>; + type SerializeMap = Compound<'a, W>; + type SerializeStruct = Compound<'a, W>; + type SerializeStructVariant = Compound<'a, W>; - fn serialize_unit(&mut self) -> SerializeResult<()> { Ok(()) } + fn serialize_unit(self) -> Result<()> { Ok(()) } - fn serialize_unit_struct(&mut self, _: &'static str) -> SerializeResult<()> { Ok(()) } + fn serialize_unit_struct(self, _: &'static str) -> Result<()> { Ok(()) } - fn serialize_bool(&mut self, v: bool) -> SerializeResult<()> { - self.writer.write_u8(if v {1} else {0}).map_err(wrap_io) + fn serialize_bool(self, v: bool) -> Result<()> { + self.writer.write_u8(if v {1} else {0}).map_err(Into::into) } - fn serialize_u8(&mut self, v: u8) -> SerializeResult<()> { - self.writer.write_u8(v).map_err(wrap_io) + fn serialize_u8(self, v: u8) -> Result<()> { + self.writer.write_u8(v).map_err(Into::into) } - fn serialize_u16(&mut self, v: u16) -> SerializeResult<()> { - self.writer.write_u16::(v).map_err(wrap_io) + fn serialize_u16(self, v: u16) -> Result<()> { + self.writer.write_u16::(v).map_err(Into::into) } - fn serialize_u32(&mut self, v: u32) -> SerializeResult<()> { - self.writer.write_u32::(v).map_err(wrap_io) + fn serialize_u32(self, v: u32) -> Result<()> { + self.writer.write_u32::(v).map_err(Into::into) } - fn serialize_u64(&mut self, v: u64) -> SerializeResult<()> { - self.writer.write_u64::(v).map_err(wrap_io) + fn serialize_u64(self, v: u64) -> Result<()> { + self.writer.write_u64::(v).map_err(Into::into) } - fn serialize_usize(&mut self, v: usize) -> SerializeResult<()> { - self.serialize_u64(v as u64) + fn serialize_i8(self, v: i8) -> Result<()> { + self.writer.write_i8(v).map_err(Into::into) } - fn serialize_i8(&mut self, v: i8) -> SerializeResult<()> { - self.writer.write_i8(v).map_err(wrap_io) + fn serialize_i16(self, v: i16) -> Result<()> { + self.writer.write_i16::(v).map_err(Into::into) } - fn serialize_i16(&mut self, v: i16) -> SerializeResult<()> { - self.writer.write_i16::(v).map_err(wrap_io) + fn serialize_i32(self, v: i32) -> Result<()> { + self.writer.write_i32::(v).map_err(Into::into) } - fn serialize_i32(&mut self, v: i32) -> SerializeResult<()> { - self.writer.write_i32::(v).map_err(wrap_io) + fn serialize_i64(self, v: i64) -> Result<()> { + self.writer.write_i64::(v).map_err(Into::into) } - fn serialize_i64(&mut self, v: i64) -> SerializeResult<()> { - self.writer.write_i64::(v).map_err(wrap_io) + fn serialize_f32(self, v: f32) -> Result<()> { + self.writer.write_f32::(v).map_err(Into::into) } - fn serialize_isize(&mut self, v: isize) -> SerializeResult<()> { - self.serialize_i64(v as i64) + fn serialize_f64(self, v: f64) -> Result<()> { + self.writer.write_f64::(v).map_err(Into::into) } - fn serialize_f32(&mut self, v: f32) -> SerializeResult<()> { - self.writer.write_f32::(v).map_err(wrap_io) + fn serialize_str(self, v: &str) -> Result<()> { + try!(self.serialize_u64(v.len() as u64)); + self.writer.write_all(v.as_bytes()).map_err(Into::into) } - fn serialize_f64(&mut self, v: f64) -> SerializeResult<()> { - self.writer.write_f64::(v).map_err(wrap_io) + fn serialize_char(self, c: char) -> Result<()> { + self.writer.write_all(encode_utf8(c).as_slice()).map_err(Into::into) } - fn serialize_str(&mut self, v: &str) -> SerializeResult<()> { - try!(self.serialize_usize(v.len())); - self.writer.write_all(v.as_bytes()).map_err(SerializeError::IoError) + fn serialize_bytes(self, v: &[u8]) -> Result<()> { + try!(self.serialize_u64(v.len() as u64)); + self.writer.write_all(v).map_err(Into::into) } - fn serialize_char(&mut self, c: char) -> SerializeResult<()> { - self.writer.write_all(encode_utf8(c).as_slice()).map_err(SerializeError::IoError) + fn serialize_none(self) -> Result<()> { + self.writer.write_u8(0).map_err(Into::into) } - fn serialize_bytes(&mut self, v: &[u8]) -> SerializeResult<()> { - try!(self.serialize_usize(v.len())); - self.writer.write_all(v).map_err(SerializeError::IoError) - } - - fn serialize_none(&mut self) -> SerializeResult<()> { - self.writer.write_u8(0).map_err(wrap_io) - } - - fn serialize_some(&mut self, v: T) -> SerializeResult<()> + fn serialize_some(self, v: &T) -> Result<()> where T: serde::Serialize, { - try!(self.writer.write_u8(1).map_err(wrap_io)); + try!(self.writer.write_u8(1)); v.serialize(self) } - fn serialize_seq(&mut self, len: Option) -> SerializeResult<()> { - let len = len.expect("do not know how to serialize a sequence with no length"); - self.serialize_usize(len) + fn serialize_seq(self, len: Option) -> Result { + let len = try!(len.ok_or(ErrorKind::SequenceMustHaveLength)); + try!(self.serialize_u64(len as u64)); + Ok(Compound {ser: self}) } - fn serialize_seq_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) + fn serialize_seq_fixed_size(self, _len: usize) -> Result { + Ok(Compound {ser: self}) } - fn serialize_seq_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) + fn serialize_tuple(self, _len: usize) -> Result { + Ok(Compound {ser: self}) } - fn serialize_seq_fixed_size(&mut self, len: usize) -> SerializeResult<()> { - self.serialize_seq(Some(len)) + fn serialize_tuple_struct(self, _name: &'static str, _len: usize) -> Result { + Ok(Compound {ser: self}) } - fn serialize_tuple(&mut self, _len: usize) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_tuple_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_struct(&mut self, _name: &'static str, _len: usize) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_struct_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_tuple_struct_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_variant(&mut self, + fn serialize_tuple_variant(self, _name: &'static str, variant_index: usize, _variant: &'static str, - _len: usize) -> SerializeResult<()> + _len: usize) -> Result { - self.add_enum_tag(variant_index) + try!(self.add_enum_tag(variant_index)); + Ok(Compound {ser: self}) } - fn serialize_tuple_variant_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) + fn serialize_map(self, len: Option) -> Result { + let len = try!(len.ok_or(ErrorKind::SequenceMustHaveLength)); + try!(self.serialize_u64(len as u64)); + Ok(Compound {ser: self}) } - fn serialize_tuple_variant_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) + fn serialize_struct(self, _name: &'static str, _len: usize) -> Result { + Ok(Compound {ser: self}) } - fn serialize_map(&mut self, len: Option) -> SerializeResult<()> { - let len = len.expect("do not know how to serialize a map with no length"); - self.serialize_usize(len) - } - - fn serialize_map_key(&mut self, _: &mut (), key: K) -> SerializeResult<()> - where K: serde::Serialize, - { - key.serialize(self) - } - - fn serialize_map_value(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_map_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_struct(&mut self, _name: &'static str, _len: usize) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_struct_elt(&mut self, _: &mut (), _key: &'static str, value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_struct_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_struct_variant(&mut self, + fn serialize_struct_variant(self, _name: &'static str, variant_index: usize, _variant: &'static str, - _len: usize) -> SerializeResult<()> + _len: usize) -> Result { - self.add_enum_tag(variant_index) + try!(self.add_enum_tag(variant_index)); + Ok(Compound {ser: self}) } - fn serialize_struct_variant_elt(&mut self, _: &mut (), _key: &'static str, value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_struct_variant_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_newtype_struct(&mut self, + fn serialize_newtype_struct(self, _name: &'static str, - value: T) -> SerializeResult<()> + value: &T) -> Result<()> where T: serde::ser::Serialize, { value.serialize(self) } - fn serialize_newtype_variant(&mut self, + fn serialize_newtype_variant(self, _name: &'static str, variant_index: usize, _variant: &'static str, - value: T) -> SerializeResult<()> + value: &T) -> Result<()> where T: serde::ser::Serialize, { try!(self.add_enum_tag(variant_index)); value.serialize(self) } - fn serialize_unit_variant(&mut self, + fn serialize_unit_variant(self, _name: &'static str, variant_index: usize, - _variant: &'static str) -> SerializeResult<()> { + _variant: &'static str) -> Result<()> { self.add_enum_tag(variant_index) } } @@ -338,21 +203,21 @@ impl SizeChecker { } } - fn add_raw(&mut self, size: usize) -> SerializeResult<()> { + fn add_raw(&mut self, size: usize) -> Result<()> { self.written += size as u64; if self.written <= self.size_limit { Ok(()) } else { - Err(SerializeError::SizeLimit) + Err(ErrorKind::SizeLimit.into()) } } - fn add_value(&mut self, t: T) -> SerializeResult<()> { + fn add_value(&mut self, t: T) -> Result<()> { use std::mem::size_of_val; self.add_raw(size_of_val(&t)) } - fn add_enum_tag(&mut self, tag: usize) -> SerializeResult<()> { + fn add_enum_tag(&mut self, tag: usize) -> Result<()> { if tag > u32::MAX as usize { panic!("Variant tag doesn't fit in a u32") } @@ -361,242 +226,446 @@ impl SizeChecker { } } -impl serde::Serializer for SizeChecker { - type Error = SerializeError; - type SeqState = (); - type TupleState = (); - type TupleStructState = (); - type TupleVariantState = (); - type MapState = (); - type StructState = (); - type StructVariantState = (); +impl<'a> serde::Serializer for &'a mut SizeChecker { + type Ok = (); + type Error = Error; + type SerializeSeq = SizeCompound<'a>; + type SerializeTuple = SizeCompound<'a>; + type SerializeTupleStruct = SizeCompound<'a>; + type SerializeTupleVariant = SizeCompound<'a>; + type SerializeMap = SizeCompound<'a>; + type SerializeStruct = SizeCompound<'a>; + type SerializeStructVariant = SizeCompound<'a>; - fn serialize_unit(&mut self) -> SerializeResult<()> { Ok(()) } + fn serialize_unit(self) -> Result<()> { Ok(()) } - fn serialize_unit_struct(&mut self, _: &'static str) -> SerializeResult<()> { Ok(()) } + fn serialize_unit_struct(self, _: &'static str) -> Result<()> { Ok(()) } - fn serialize_bool(&mut self, _: bool) -> SerializeResult<()> { + fn serialize_bool(self, _: bool) -> Result<()> { self.add_value(0 as u8) } - fn serialize_u8(&mut self, v: u8) -> SerializeResult<()> { + fn serialize_u8(self, v: u8) -> Result<()> { self.add_value(v) } - fn serialize_u16(&mut self, v: u16) -> SerializeResult<()> { + fn serialize_u16(self, v: u16) -> Result<()> { self.add_value(v) } - fn serialize_u32(&mut self, v: u32) -> SerializeResult<()> { + fn serialize_u32(self, v: u32) -> Result<()> { self.add_value(v) } - fn serialize_u64(&mut self, v: u64) -> SerializeResult<()> { + fn serialize_u64(self, v: u64) -> Result<()> { self.add_value(v) } - fn serialize_usize(&mut self, v: usize) -> SerializeResult<()> { - self.serialize_u64(v as u64) - } - - fn serialize_i8(&mut self, v: i8) -> SerializeResult<()> { + fn serialize_i8(self, v: i8) -> Result<()> { self.add_value(v) } - fn serialize_i16(&mut self, v: i16) -> SerializeResult<()> { + fn serialize_i16(self, v: i16) -> Result<()> { self.add_value(v) } - fn serialize_i32(&mut self, v: i32) -> SerializeResult<()> { + fn serialize_i32(self, v: i32) -> Result<()> { self.add_value(v) } - fn serialize_i64(&mut self, v: i64) -> SerializeResult<()> { + fn serialize_i64(self, v: i64) -> Result<()> { self.add_value(v) } - fn serialize_isize(&mut self, v: isize) -> SerializeResult<()> { - self.serialize_i64(v as i64) - } - - fn serialize_f32(&mut self, v: f32) -> SerializeResult<()> { + fn serialize_f32(self, v: f32) -> Result<()> { self.add_value(v) } - fn serialize_f64(&mut self, v: f64) -> SerializeResult<()> { + fn serialize_f64(self, v: f64) -> Result<()> { self.add_value(v) } - fn serialize_str(&mut self, v: &str) -> SerializeResult<()> { + fn serialize_str(self, v: &str) -> Result<()> { try!(self.add_value(0 as u64)); self.add_raw(v.len()) } - fn serialize_char(&mut self, c: char) -> SerializeResult<()> { + fn serialize_char(self, c: char) -> Result<()> { self.add_raw(encode_utf8(c).as_slice().len()) } - fn serialize_bytes(&mut self, v: &[u8]) -> SerializeResult<()> { + fn serialize_bytes(self, v: &[u8]) -> Result<()> { try!(self.add_value(0 as u64)); self.add_raw(v.len()) } - fn serialize_none(&mut self) -> SerializeResult<()> { + fn serialize_none(self) -> Result<()> { self.add_value(0 as u8) } - fn serialize_some(&mut self, v: T) -> SerializeResult<()> + fn serialize_some(self, v: &T) -> Result<()> where T: serde::Serialize, { try!(self.add_value(1 as u8)); v.serialize(self) } - fn serialize_seq(&mut self, len: Option) -> SerializeResult<()> { - let len = len.expect("do not know how to serialize a sequence with no length"); + fn serialize_seq(self, len: Option) -> Result { + let len = try!(len.ok_or(ErrorKind::SequenceMustHaveLength)); - self.serialize_usize(len) + try!(self.serialize_u64(len as u64)); + Ok(SizeCompound {ser: self}) } - fn serialize_seq_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) + fn serialize_seq_fixed_size(self, _len: usize) -> Result { + Ok(SizeCompound {ser: self}) } - fn serialize_seq_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) + fn serialize_tuple(self, _len: usize) -> Result { + Ok(SizeCompound {ser: self}) } - fn serialize_seq_fixed_size(&mut self, len: usize) -> SerializeResult<()> { - self.serialize_seq(Some(len)) + fn serialize_tuple_struct(self, _name: &'static str, _len: usize) -> Result { + Ok(SizeCompound {ser: self}) } - fn serialize_tuple(&mut self, _len: usize) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_tuple_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_struct(&mut self, _name: &'static str, _len: usize) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_struct_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_tuple_struct_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_tuple_variant(&mut self, + fn serialize_tuple_variant(self, _name: &'static str, variant_index: usize, _variant: &'static str, - _len: usize) -> SerializeResult<()> + _len: usize) -> Result { - self.add_enum_tag(variant_index) + try!(self.add_enum_tag(variant_index)); + Ok(SizeCompound {ser: self}) } - fn serialize_tuple_variant_elt(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, + fn serialize_map(self, len: Option) -> Result { - value.serialize(self) + let len = try!(len.ok_or(ErrorKind::SequenceMustHaveLength)); + + try!(self.serialize_u64(len as u64)); + Ok(SizeCompound {ser: self}) } - fn serialize_tuple_variant_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) + fn serialize_struct(self, _name: &'static str, _len: usize) -> Result { + Ok(SizeCompound {ser: self}) } - fn serialize_map(&mut self, len: Option) -> SerializeResult<()> - { - let len = len.expect("do not know how to serialize a map with no length"); - - self.serialize_usize(len) - } - - fn serialize_map_key(&mut self, _: &mut (), key: K) -> SerializeResult<()> - where K: serde::Serialize, - { - key.serialize(self) - } - - fn serialize_map_value(&mut self, _: &mut (), value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_map_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_struct(&mut self, _name: &'static str, _len: usize) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_struct_elt(&mut self, _: &mut (), _key: &'static str, value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_struct_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_struct_variant(&mut self, + fn serialize_struct_variant(self, _name: &'static str, variant_index: usize, _variant: &'static str, - _len: usize) -> SerializeResult<()> + _len: usize) -> Result { - self.add_enum_tag(variant_index) + try!(self.add_enum_tag(variant_index)); + Ok(SizeCompound {ser: self}) } - fn serialize_struct_variant_elt(&mut self, _: &mut (), _field: &'static str, value: V) -> SerializeResult<()> - where V: serde::Serialize, - { - value.serialize(self) - } - - fn serialize_struct_variant_end(&mut self, _: ()) -> SerializeResult<()> { - Ok(()) - } - - fn serialize_newtype_struct(&mut self, _name: &'static str, v: V) -> SerializeResult<()> { + fn serialize_newtype_struct(self, _name: &'static str, v: &V) -> Result<()> { v.serialize(self) } - fn serialize_unit_variant(&mut self, + fn serialize_unit_variant(self, _name: &'static str, variant_index: usize, - _variant: &'static str) -> SerializeResult<()> { + _variant: &'static str) -> Result<()> { self.add_enum_tag(variant_index) } - fn serialize_newtype_variant(&mut self, + fn serialize_newtype_variant(self, _name: &'static str, variant_index: usize, _variant: &'static str, - value: V) -> SerializeResult<()> + value: &V) -> Result<()> { try!(self.add_enum_tag(variant_index)); value.serialize(self) } } +#[doc(hidden)] +pub struct Compound<'a, W: 'a> { + ser: &'a mut Serializer, +} + +impl<'a, W> serde::ser::SerializeSeq for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_element(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a, W> serde::ser::SerializeTuple for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_element(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a, W> serde::ser::SerializeTupleStruct for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a, W> serde::ser::SerializeTupleVariant for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a, W> serde::ser::SerializeMap for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_key(&mut self, value: &K) -> Result<()> + where K: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn serialize_value(&mut self, value: &V) -> Result<()> + where V: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a, W> serde::ser::SerializeStruct for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, _key: &'static str, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a, W> serde::ser::SerializeStructVariant for Compound<'a, W> + where W: Write +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, _key: &'static str, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +#[doc(hidden)] +pub struct SizeCompound<'a> { + ser: &'a mut SizeChecker, +} + +impl<'a> serde::ser::SerializeSeq for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_element(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a> serde::ser::SerializeTuple for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_element(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a> serde::ser::SerializeTupleStruct for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a> serde::ser::SerializeTupleVariant for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a> serde::ser::SerializeMap for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_key(&mut self, value: &K) -> Result<()> + where K: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn serialize_value(&mut self, value: &V) -> Result<()> + where V: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a> serde::ser::SerializeStruct for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, _key: &'static str, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + +impl<'a> serde::ser::SerializeStructVariant for SizeCompound<'a> +{ + type Ok = (); + type Error = Error; + + #[inline] + fn serialize_field(&mut self, _key: &'static str, value: &T) -> Result<()> + where T: serde::ser::Serialize + { + value.serialize(&mut *self.ser) + } + + #[inline] + fn end(self) -> Result<()> { + Ok(()) + } +} + const TAG_CONT: u8 = 0b1000_0000; const TAG_TWO_B: u8 = 0b1100_0000; const TAG_THREE_B: u8 = 0b1110_0000; diff --git a/third_party/rust/bincode/tests/test.rs b/third_party/rust/bincode/tests/test.rs index 13c0dc14252a..2d109e33cb83 100644 --- a/third_party/rust/bincode/tests/test.rs +++ b/third_party/rust/bincode/tests/test.rs @@ -1,64 +1,49 @@ -#![feature(proc_macro)] - #[macro_use] extern crate serde_derive; extern crate bincode; -extern crate rustc_serialize; extern crate serde; use std::fmt::Debug; use std::collections::HashMap; use std::ops::Deref; -use rustc_serialize::{Encodable, Encoder, Decodable, Decoder}; - -use bincode::{RefBox, StrBox, SliceBox}; +use bincode::refbox::{RefBox, StrBox, SliceBox}; use bincode::SizeLimit::{self, Infinite, Bounded}; -use bincode::rustc_serialize::{encode, decode, decode_from, DecodingError}; -use bincode::serde::{serialize, deserialize, deserialize_from, DeserializeError, DeserializeResult}; +use bincode::{serialize, serialized_size, deserialize, deserialize_from, ErrorKind, Result}; fn proxy_encode(element: &V, size_limit: SizeLimit) -> Vec - where V: Encodable + Decodable + serde::Serialize + serde::Deserialize + PartialEq + Debug + 'static + where V: serde::Serialize + serde::Deserialize + PartialEq + Debug + 'static { - let v1 = bincode::rustc_serialize::encode(element, size_limit).unwrap(); - let v2 = bincode::serde::serialize(element, size_limit).unwrap(); - assert_eq!(v1, v2); - - v1 + let v2 = serialize(element, size_limit).unwrap(); + v2 } fn proxy_decode(slice: &[u8]) -> V - where V: Encodable + Decodable + serde::Serialize + serde::Deserialize + PartialEq + Debug + 'static + where V: serde::Serialize + serde::Deserialize + PartialEq + Debug + 'static { - let e1 = bincode::rustc_serialize::decode(slice).unwrap(); - let e2 = bincode::serde::deserialize(slice).unwrap(); - - assert_eq!(e1, e2); - - e1 + let e2 = deserialize(slice).unwrap(); + e2 } fn proxy_encoded_size(element: &V) -> u64 - where V: Encodable + serde::Serialize + PartialEq + Debug + 'static + where V: serde::Serialize + PartialEq + Debug + 'static { - let ser_size = bincode::rustc_serialize::encoded_size(element); - let serde_size = bincode::serde::serialized_size(element); - assert_eq!(ser_size, serde_size); - ser_size + let serde_size = serialized_size(element); + serde_size } fn the_same(element: V) - where V: Encodable+Decodable+serde::Serialize+serde::Deserialize+PartialEq+Debug+'static + where V: serde::Serialize+serde::Deserialize+PartialEq+Debug+'static { // Make sure that the bahavior isize correct when wrapping with a RefBox. fn ref_box_correct(v: &V) -> bool - where V: Encodable + Decodable + PartialEq + Debug + 'static + where V: serde::Serialize + serde::Deserialize + PartialEq + Debug + 'static { let rf = RefBox::new(v); - let encoded = bincode::rustc_serialize::encode(&rf, Infinite).unwrap(); - let decoded: RefBox<'static, V> = bincode::rustc_serialize::decode(&encoded[..]).unwrap(); + let encoded = serialize(&rf, Infinite).unwrap(); + let decoded: RefBox<'static, V> = deserialize(&encoded[..]).unwrap(); decoded.take().deref() == v } @@ -116,7 +101,7 @@ fn test_tuple() { #[test] fn test_basic_struct() { - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, PartialEq, Debug)] + #[derive(Serialize, Deserialize, PartialEq, Debug)] struct Easy { x: isize, s: String, @@ -127,13 +112,13 @@ fn test_basic_struct() { #[test] fn test_nested_struct() { - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, PartialEq, Debug)] + #[derive(Serialize, Deserialize, PartialEq, Debug)] struct Easy { x: isize, s: String, y: usize } - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, PartialEq, Debug)] + #[derive(Serialize, Deserialize, PartialEq, Debug)] struct Nest { f: Easy, b: usize, @@ -149,7 +134,7 @@ fn test_nested_struct() { #[test] fn test_struct_newtype() { - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, PartialEq, Debug)] + #[derive(Serialize, Deserialize, PartialEq, Debug)] struct NewtypeStr(usize); the_same(NewtypeStr(5)); @@ -157,7 +142,7 @@ fn test_struct_newtype() { #[test] fn test_struct_tuple() { - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, PartialEq, Debug)] + #[derive(Serialize, Deserialize, PartialEq, Debug)] struct TubStr(usize, String, f32); the_same(TubStr(5, "hello".to_string(), 3.2)); @@ -172,7 +157,7 @@ fn test_option() { #[test] fn test_enum() { - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, PartialEq, Debug)] + #[derive(Serialize, Deserialize, PartialEq, Debug)] enum TestEnum { NoArg, OneArg(usize), @@ -182,7 +167,7 @@ fn test_enum() { } the_same(TestEnum::NoArg); the_same(TestEnum::OneArg(4)); - the_same(TestEnum::Args(4, 5)); + //the_same(TestEnum::Args(4, 5)); the_same(TestEnum::AnotherNoArg); the_same(TestEnum::StructLike{x: 4, y: 3.14159}); the_same(vec![TestEnum::NoArg, TestEnum::OneArg(5), TestEnum::AnotherNoArg, @@ -224,44 +209,21 @@ fn test_fixed_size_array() { the_same([0u8; 19]); } -#[test] -fn decoding_errors() { - fn isize_invalid_encoding(res: bincode::rustc_serialize::DecodingResult) { - match res { - Ok(_) => panic!("Expecting error"), - Err(DecodingError::IoError(_)) => panic!("Expecting InvalidEncoding"), - Err(DecodingError::SizeLimit) => panic!("Expecting InvalidEncoding"), - Err(DecodingError::InvalidEncoding(_)) => {}, - } - } - - isize_invalid_encoding(decode::(&vec![0xA][..])); - isize_invalid_encoding(decode::(&vec![0, 0, 0, 0, 0, 0, 0, 1, 0xFF][..])); - // Out-of-bounds variant - #[derive(RustcEncodable, RustcDecodable, Serialize)] - enum Test { - One, - Two, - }; - isize_invalid_encoding(decode::(&vec![0, 0, 0, 5][..])); - isize_invalid_encoding(decode::>(&vec![5, 0][..])); -} - #[test] fn deserializing_errors() { - fn isize_invalid_deserialize(res: DeserializeResult) { - match res { - Err(DeserializeError::InvalidEncoding(_)) => {}, - Err(DeserializeError::Serde(serde::de::value::Error::UnknownVariant(_))) => {}, - Err(DeserializeError::Serde(serde::de::value::Error::InvalidValue(_))) => {}, - _ => panic!("Expecting InvalidEncoding, got {:?}", res), + fn isize_invalid_deserialize(res: Result) { + match res.map_err(|e| *e) { + Err(ErrorKind::InvalidEncoding{..}) => {}, + Err(ErrorKind::Custom(ref s)) if s.contains("invalid encoding") => {}, + Err(ErrorKind::Custom(ref s)) if s.contains("invalid value") => {}, + other => panic!("Expecting InvalidEncoding, got {:?}", other), } } isize_invalid_deserialize(deserialize::(&vec![0xA][..])); isize_invalid_deserialize(deserialize::(&vec![0, 0, 0, 0, 0, 0, 0, 1, 0xFF][..])); // Out-of-bounds variant - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, Debug)] + #[derive(Serialize, Deserialize, Debug)] enum Test { One, Two, @@ -270,25 +232,14 @@ fn deserializing_errors() { isize_invalid_deserialize(deserialize::>(&vec![5, 0][..])); } -#[test] -fn too_big_decode() { - let encoded = vec![0,0,0,3]; - let decoded: Result = decode_from(&mut &encoded[..], Bounded(3)); - assert!(decoded.is_err()); - - let encoded = vec![0,0,0,3]; - let decoded: Result = decode_from(&mut &encoded[..], Bounded(4)); - assert!(decoded.is_ok()); -} - #[test] fn too_big_deserialize() { let serialized = vec![0,0,0,3]; - let deserialized: Result = deserialize_from(&mut &serialized[..], Bounded(3)); + let deserialized: Result = deserialize_from(&mut &serialized[..], Bounded(3)); assert!(deserialized.is_err()); let serialized = vec![0,0,0,3]; - let deserialized: Result = deserialize_from(&mut &serialized[..], Bounded(4)); + let deserialized: Result = deserialize_from(&mut &serialized[..], Bounded(4)); assert!(deserialized.is_ok()); } @@ -302,31 +253,14 @@ fn char_serialization() { } } -#[test] -fn too_big_char_decode() { - let encoded = vec![0x41]; - let decoded: Result = decode_from(&mut &encoded[..], Bounded(1)); - assert!(decoded.is_ok()); - assert_eq!(decoded.unwrap(), 'A'); -} - #[test] fn too_big_char_deserialize() { let serialized = vec![0x41]; - let deserialized: Result = deserialize_from(&mut &serialized[..], Bounded(1)); + let deserialized: Result = deserialize_from(&mut &serialized[..], Bounded(1)); assert!(deserialized.is_ok()); assert_eq!(deserialized.unwrap(), 'A'); } -#[test] -fn too_big_encode() { - assert!(encode(&0u32, Bounded(3)).is_err()); - assert!(encode(&0u32, Bounded(4)).is_ok()); - - assert!(encode(&"abcde", Bounded(8 + 4)).is_err()); - assert!(encode(&"abcde", Bounded(8 + 5)).is_ok()); -} - #[test] fn too_big_serialize() { assert!(serialize(&0u32, Bounded(3)).is_err()); @@ -370,42 +304,6 @@ fn encode_box() { the_same(Box::new(5)); } -#[test] -fn test_refbox_encode() { - let large_object = vec![1u32,2,3,4,5,6]; - let mut large_map = HashMap::new(); - large_map.insert(1, 2); - - - #[derive(RustcEncodable, RustcDecodable, Debug)] - enum Message<'a> { - M1(RefBox<'a, Vec>), - M2(RefBox<'a, HashMap>) - } - - // Test 1 - { - let encoded = encode(&Message::M1(RefBox::new(&large_object)), Infinite).unwrap(); - let decoded: Message<'static> = decode(&encoded[..]).unwrap(); - - match decoded { - Message::M1(b) => assert!(b.take().deref() == &large_object), - _ => assert!(false) - } - } - - // Test 2 - { - let encoded = encode(&Message::M2(RefBox::new(&large_map)), Infinite).unwrap(); - let decoded: Message<'static> = decode(&encoded[..]).unwrap(); - - match decoded { - Message::M2(b) => assert!(b.take().deref() == &large_map), - _ => assert!(false) - } - } -} - #[test] fn test_refbox_serialize() { let large_object = vec![1u32,2,3,4,5,6]; @@ -413,7 +311,7 @@ fn test_refbox_serialize() { large_map.insert(1, 2); - #[derive(RustcEncodable, RustcDecodable, Serialize, Deserialize, Debug)] + #[derive(Serialize, Deserialize, Debug)] enum Message<'a> { M1(RefBox<'a, Vec>), M2(RefBox<'a, HashMap>) @@ -442,15 +340,6 @@ fn test_refbox_serialize() { } } -#[test] -fn test_strbox_encode() { - let strx: &'static str = "hello world"; - let encoded = encode(&StrBox::new(strx), Infinite).unwrap(); - let decoded: StrBox<'static> = decode(&encoded[..]).unwrap(); - let stringx: String = decoded.take(); - assert!(strx == &stringx[..]); -} - #[test] fn test_strbox_serialize() { let strx: &'static str = "hello world"; @@ -460,19 +349,6 @@ fn test_strbox_serialize() { assert!(strx == &stringx[..]); } -#[test] -fn test_slicebox_encode() { - let slice = [1u32, 2, 3 ,4, 5]; - let encoded = encode(&SliceBox::new(&slice), Infinite).unwrap(); - let decoded: SliceBox<'static, u32> = decode(&encoded[..]).unwrap(); - { - let sb: &[u32] = &decoded; - assert!(slice == sb); - } - let vecx: Vec = decoded.take(); - assert!(slice == &vecx[..]); -} - #[test] fn test_slicebox_serialize() { let slice = [1u32, 2, 3 ,4, 5]; @@ -486,20 +362,15 @@ fn test_slicebox_serialize() { assert!(slice == &vecx[..]); } -#[test] -fn test_multi_strings_encode() { - assert!(encode(&("foo", "bar", "baz"), Infinite).is_ok()); -} - #[test] fn test_multi_strings_serialize() { assert!(serialize(&("foo", "bar", "baz"), Infinite).is_ok()); } +/* #[test] fn test_oom_protection() { use std::io::Cursor; - #[derive(RustcEncodable, RustcDecodable)] struct FakeVec { len: u64, byte: u8 @@ -507,73 +378,24 @@ fn test_oom_protection() { let x = bincode::rustc_serialize::encode(&FakeVec { len: 0xffffffffffffffffu64, byte: 1 }, bincode::SizeLimit::Bounded(10)).unwrap(); let y : Result, _> = bincode::rustc_serialize::decode_from(&mut Cursor::new(&x[..]), bincode::SizeLimit::Bounded(10)); assert!(y.is_err()); -} +}*/ #[test] fn path_buf() { use std::path::{Path, PathBuf}; let path = Path::new("foo").to_path_buf(); - let serde_encoded = bincode::serde::serialize(&path, Infinite).unwrap(); - let decoded: PathBuf = bincode::serde::deserialize(&serde_encoded).unwrap(); + let serde_encoded = serialize(&path, Infinite).unwrap(); + let decoded: PathBuf = deserialize(&serde_encoded).unwrap(); assert!(path.to_str() == decoded.to_str()); } #[test] fn bytes() { - let data = b"abc\0123"; - let b = bincode::rustc_serialize::encode(&data, Infinite).unwrap(); - let s = bincode::serde::serialize(&data, Infinite).unwrap(); - assert_eq!(b, s); - use serde::bytes::Bytes; - let s2 = bincode::serde::serialize(&Bytes::new(data), Infinite).unwrap(); - assert_eq!(s, s2); + + let data = b"abc\0123"; + let s = serialize(&data, Infinite).unwrap(); + let s2 = serialize(&Bytes::new(data), Infinite).unwrap(); + assert_eq!(s[..], s2[8..]); } -#[test] -fn test_manual_enum_encoding() { - #[derive(PartialEq)] - enum Enumeration { - Variant1, - Variant2 { val: u64 } - } - - impl Encodable for Enumeration { - fn encode(&self, s: &mut S) -> Result<(), S::Error> { - s.emit_enum("Enumeration", |s| { - match *self { - Enumeration::Variant1 => { - s.emit_enum_variant("Variant1", 0, 0, |_| Ok(())) - }, - Enumeration::Variant2 { val } => { - s.emit_enum_struct_variant("Variant2", 1, 1, |s| { - s.emit_enum_struct_variant_field("val", 0, |s| s.emit_u64(val)) - }) - } - } - }) - } - } - - impl Decodable for Enumeration { - fn decode(s: &mut D) -> Result { - s.read_enum("Enumeration", |s| { - s.read_enum_struct_variant(&["Variant1", "Variant2"], |s, num| { - match num { - 0 => Ok(Enumeration::Variant1), - 1 => Ok(Enumeration::Variant2 { val: try!(s.read_u64()) }), - _ => Err(s.error("Unknown enum variant")) - } - }) - }) - } - } - - let encoded = bincode::rustc_serialize::encode(&Enumeration::Variant1, Infinite).unwrap(); - let decoded: Enumeration = decode(&encoded[..]).unwrap(); - assert!(decoded == Enumeration::Variant1); - - let encoded = bincode::rustc_serialize::encode(&Enumeration::Variant2 { val: 42 }, Infinite).unwrap(); - let decoded: Enumeration = decode(&encoded[..]).unwrap(); - assert!(decoded == Enumeration::Variant2 { val: 42 }); -} diff --git a/third_party/rust/core-graphics/.cargo-checksum.json b/third_party/rust/core-graphics/.cargo-checksum.json index 82ce9c35f1c2..367e383c58de 100644 --- a/third_party/rust/core-graphics/.cargo-checksum.json +++ b/third_party/rust/core-graphics/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"d0114f648b7f61e473b61c6d682fefaa4e3fadf2101aff056e2ffc52e9229d87",".travis.yml":"b71b9a6f84b9263b2b89be6ec90dff5920ee68cf9e5768d73ed71957de2d0670","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"101ff1c674aad746f5a9cc0aec36b7bb7da61df7b621ade9f3c4052ab0901ec6","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","README.md":"4a45abeb1e684e30bb361dfa7db59189423348e18d310cbae694b7c8c57cd86a","src/base.rs":"3f3d5d69bd79b146cc3c0402de6260f7531c04e6a44b080f4ec7c8cedebd1337","src/color_space.rs":"7d447e774e85cc33de574637a93c9a8550b681c8d4b94e99f95261ea9740e288","src/context.rs":"7c764ffde2e0ebaecd30ced31ece29f82ddea2f3c8145f4ea59882df38fec0d2","src/data_provider.rs":"899a5762ea472b828e1726e1cefc8d2dbd237772ce171cf6b31a79f144ce8df1","src/display.rs":"906cbcb13f8214308a6afcfb3abdd04e409f48ce62673574d40087486f38b36d","src/event.rs":"7f25a98207f200f10717c2765179ece8ba02600767b7c194c49854e7bfaa470c","src/event_source.rs":"6d1c1378dab8988c46dd3bf20639913716418980b9b490a37a0d5120c60ad580","src/font.rs":"635ee3d1039c807e00fe93b974c9e375c532f09c99322dd93b9496783a662c0a","src/geometry.rs":"9f59dcf55f393a3fa001afe8aea68a85a3c9a06239aeafe6da5d2823ed37b271","src/lib.rs":"efed3638b05e6a806a6fa0c544893afeec931f6c6889bd4a69d8fd2f9838967f","src/private.rs":"87c96ed2002bd567bf02535b4c6e8e3f22827afb2dd92ee17d91cfb45bc6072c"},"package":"7b205856aba54bfd36e69a1058f45fbe0d3c37be7375309dcff4a22a2a631fea"} \ No newline at end of file +{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"d0114f648b7f61e473b61c6d682fefaa4e3fadf2101aff056e2ffc52e9229d87",".travis.yml":"b71b9a6f84b9263b2b89be6ec90dff5920ee68cf9e5768d73ed71957de2d0670","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"21861781fe43e924d0ae78c0f74dbd8bae7e73818a3ef9692f107ca52cdb04cf","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","README.md":"4a45abeb1e684e30bb361dfa7db59189423348e18d310cbae694b7c8c57cd86a","src/base.rs":"3f3d5d69bd79b146cc3c0402de6260f7531c04e6a44b080f4ec7c8cedebd1337","src/color_space.rs":"7d447e774e85cc33de574637a93c9a8550b681c8d4b94e99f95261ea9740e288","src/context.rs":"7c764ffde2e0ebaecd30ced31ece29f82ddea2f3c8145f4ea59882df38fec0d2","src/data_provider.rs":"899a5762ea472b828e1726e1cefc8d2dbd237772ce171cf6b31a79f144ce8df1","src/display.rs":"906cbcb13f8214308a6afcfb3abdd04e409f48ce62673574d40087486f38b36d","src/event.rs":"7f25a98207f200f10717c2765179ece8ba02600767b7c194c49854e7bfaa470c","src/event_source.rs":"6d1c1378dab8988c46dd3bf20639913716418980b9b490a37a0d5120c60ad580","src/font.rs":"f14340aee0979f6362da671cccf81c49f6e345cd645f07fc75e7074d06e99c70","src/geometry.rs":"9f59dcf55f393a3fa001afe8aea68a85a3c9a06239aeafe6da5d2823ed37b271","src/lib.rs":"efed3638b05e6a806a6fa0c544893afeec931f6c6889bd4a69d8fd2f9838967f","src/private.rs":"87c96ed2002bd567bf02535b4c6e8e3f22827afb2dd92ee17d91cfb45bc6072c"},"package":"ead017dcf77f503dc991f6b52de6084eeea60a94b0a652baa9bf88654a28e83f"} \ No newline at end of file diff --git a/third_party/rust/core-graphics/Cargo.toml b/third_party/rust/core-graphics/Cargo.toml index 4a8508c5e86b..2604b3f9878f 100644 --- a/third_party/rust/core-graphics/Cargo.toml +++ b/third_party/rust/core-graphics/Cargo.toml @@ -3,7 +3,7 @@ name = "core-graphics" description = "Bindings to Core Graphics for OS X" homepage = "https://github.com/servo/core-graphics-rs" repository = "https://github.com/servo/core-graphics-rs" -version = "0.6.0" +version = "0.7.0" authors = ["The Servo Project Developers"] license = "MIT / Apache-2.0" @@ -14,4 +14,4 @@ elcapitan = [] [dependencies] libc = "0.2" core-foundation = "0.3" -serde = "0.8" +serde = "0.9" diff --git a/third_party/rust/core-graphics/src/font.rs b/third_party/rust/core-graphics/src/font.rs index e3e270062606..58b3630e5cc5 100644 --- a/third_party/rust/core-graphics/src/font.rs +++ b/third_party/rust/core-graphics/src/font.rs @@ -32,17 +32,17 @@ unsafe impl Send for CGFont {} unsafe impl Sync for CGFont {} impl Serialize for CGFont { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { + fn serialize(&self, serializer: S) -> Result where S: Serializer { let postscript_name = self.postscript_name().to_string(); postscript_name.serialize(serializer) } } impl Deserialize for CGFont { - fn deserialize(deserializer: &mut D) -> Result where D: Deserializer { + fn deserialize(deserializer: D) -> Result where D: Deserializer { let postscript_name: String = try!(Deserialize::deserialize(deserializer)); CGFont::from_name(&CFString::new(&*postscript_name)).map_err(|_| { - de::Error::invalid_value("Couldn't find a font with that PostScript name!") + de::Error::custom("Couldn't find a font with that PostScript name!") }) } } diff --git a/third_party/rust/core-text/.cargo-checksum.json b/third_party/rust/core-text/.cargo-checksum.json index e677ed041ec6..8eadbdb8b8a4 100644 --- a/third_party/rust/core-text/.cargo-checksum.json +++ b/third_party/rust/core-text/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"d0114f648b7f61e473b61c6d682fefaa4e3fadf2101aff056e2ffc52e9229d87",".travis.yml":"6aad961651169d31d79c0595624d1777b5c4cbb4cf2bed9a126c7e72d29411fd","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"fd225e94253c22c5a1ad569e5e2db7e0219ed9b0bc30d8a2d4f3a5e55fa2d533","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","README.md":"0c82015d302c9937e6376debd961350afeaeb6dde228aac95e3a3115c5813613","src/font.rs":"d9df5c37cb98436dbf8162af9c3449fea1eab41511d326840759d46d514bcada","src/font_collection.rs":"d4ca7f741fd54b4b22b823833dfa1f1ccd78a26cf112119ae992572835e48df6","src/font_descriptor.rs":"cedc4bd303abd4519c7c95201672ce5652f7396cd34383c059f945eefb64623b","src/font_manager.rs":"de5e22620528322d6811d01f03975c53b676ec743297590de5e17a45393df0f1","src/lib.rs":"b1fc720a9ab7ae4f054f0767e05ba5640b2d9fc8c34d05ae04f25b9dd44f6b81"},"package":"9703f459a41e622b15ca612dbc5fa4b30b6545a32864a83e0fdc538cfa08969c"} \ No newline at end of file +{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"d0114f648b7f61e473b61c6d682fefaa4e3fadf2101aff056e2ffc52e9229d87",".travis.yml":"6aad961651169d31d79c0595624d1777b5c4cbb4cf2bed9a126c7e72d29411fd","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"958d9b6c617dff0b709bd26ddcd5ef2989ad3a64e14494c2f94d12b6986f6dae","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","README.md":"0c82015d302c9937e6376debd961350afeaeb6dde228aac95e3a3115c5813613","src/font.rs":"d9df5c37cb98436dbf8162af9c3449fea1eab41511d326840759d46d514bcada","src/font_collection.rs":"d4ca7f741fd54b4b22b823833dfa1f1ccd78a26cf112119ae992572835e48df6","src/font_descriptor.rs":"cedc4bd303abd4519c7c95201672ce5652f7396cd34383c059f945eefb64623b","src/font_manager.rs":"de5e22620528322d6811d01f03975c53b676ec743297590de5e17a45393df0f1","src/lib.rs":"b1fc720a9ab7ae4f054f0767e05ba5640b2d9fc8c34d05ae04f25b9dd44f6b81"},"package":"0e9719616a10f717628e074744f8c55df7b450f7a34d29c196d14f4498aad05d"} \ No newline at end of file diff --git a/third_party/rust/core-text/Cargo.toml b/third_party/rust/core-text/Cargo.toml index f75117ed2459..a77311268e09 100644 --- a/third_party/rust/core-text/Cargo.toml +++ b/third_party/rust/core-text/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "core-text" -version = "3.0.0" +version = "4.0.0" authors = ["The Servo Project Developers"] description = "Bindings to the Core Text framework." license = "MIT/Apache-2.0" @@ -11,4 +11,4 @@ libc = "0.2" [target.x86_64-apple-darwin.dependencies] core-foundation = "0.3" -core-graphics = "0.6" +core-graphics = "0.7" diff --git a/third_party/rust/dwrote/.cargo-ok b/third_party/rust/dwrote/.cargo-ok deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/rust/euclid-0.10.5/.cargo-checksum.json b/third_party/rust/euclid-0.10.5/.cargo-checksum.json deleted file mode 100644 index 882f4ff66b9e..000000000000 --- a/third_party/rust/euclid-0.10.5/.cargo-checksum.json +++ /dev/null @@ -1 +0,0 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"118514fd9c4958df0d25584cda4917186c46011569f55ef350530c1ad3fbdb48",".travis.yml":"13d3e5a7bf83b04c8e8cfa14f0297bd8366d68391d977dd547f64707dffc275a","COPYRIGHT":"ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a","Cargo.toml":"34d79e1ddea3e2169c03b1f8ad4c3d863d2029b59423030112b2853fced70498","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3","README.md":"7a5648f52b09d3213348177860171d4f19b0fdda55e8fed7c04dafcb0ed9c215","src/approxeq.rs":"2987e046c90d948b6c7d7ddba52d10c8b7520d71dc0a50dbe7665de128d7410e","src/length.rs":"6e30abd125304985a7ae95dfb7dd92631053152a589b89df6e5c1879e91ecafa","src/lib.rs":"3ad04d3c1a18f697c8d28a1fbe871a4c75e0e957008745c6a4990e8fb07663d1","src/macros.rs":"1e999b322c2093c9c945386d15c3e95bd657c06b02e78235556db0bdbd162318","src/matrix2d.rs":"78d3b44e46be2b9c0ed1d98473cbbed78941cbf8cc76266be9f420966f1c1607","src/matrix4d.rs":"c3325f30a7a35575104a6b02fd0740d5be22e032881808550f28d22ea8eef625","src/num.rs":"62286aa642ce3afa7ebd950f50bf2197d8722907f2e23a2e2ea6690484d8b250","src/point.rs":"a585ad405a69505792efb624f0c0e6345b92b27a2c77e9a4366d6192ac914ef0","src/rect.rs":"d9bc96b8a3bc52ab2d49b53c4687e13230ab5d2920ea60e4070dea153489a633","src/scale_factor.rs":"3cffe0e88f035b8b5c9b27b105fb2825db5f317d7e067c88ee5d51cac4e6e583","src/side_offsets.rs":"f85526a421ffda63ff01a3478d4162c8717eef68e942acfa2fd9a1adee02ebb2","src/size.rs":"ef95a114f389a357ef940f42789e2cdbdbbdf4ae6993a80a74cc2c9d10c891c9","src/trig.rs":"6b207980052d13c625272f2a70a22f7741b59513c2a4882385926f497c763a63"},"package":"f93a556290e09f379cbfaa4f75ac52a72a3d2deb7d04076f312cdb2e6acba28e"} \ No newline at end of file diff --git a/third_party/rust/euclid-0.10.5/.cargo-ok b/third_party/rust/euclid-0.10.5/.cargo-ok deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/rust/euclid-0.10.5/.gitignore b/third_party/rust/euclid-0.10.5/.gitignore deleted file mode 100644 index 80faedecfd74..000000000000 --- a/third_party/rust/euclid-0.10.5/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -Cargo.lock -/target/ diff --git a/third_party/rust/euclid-0.10.5/.travis.yml b/third_party/rust/euclid-0.10.5/.travis.yml deleted file mode 100644 index a12141757c47..000000000000 --- a/third_party/rust/euclid-0.10.5/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: rust - -notifications: - webhooks: http://build.servo.org:54856/travis - -matrix: - include: - - rust: stable - env: FEATURES="" - - rust: beta - env: FEATURES="" - - rust: nightly - env: FEATURES="" - - rust: nightly - env: FEATURES="unstable" - -script: - - cargo build --verbose --features "$FEATURES" - - cargo test --verbose --features "$FEATURES" diff --git a/third_party/rust/euclid-0.10.5/COPYRIGHT b/third_party/rust/euclid-0.10.5/COPYRIGHT deleted file mode 100644 index 8b7291ad281c..000000000000 --- a/third_party/rust/euclid-0.10.5/COPYRIGHT +++ /dev/null @@ -1,5 +0,0 @@ -Licensed under the Apache License, Version 2.0 or the MIT license -, at your -option. All files in the project carrying such notice may not be -copied, modified, or distributed except according to those terms. diff --git a/third_party/rust/euclid-0.10.5/Cargo.toml b/third_party/rust/euclid-0.10.5/Cargo.toml deleted file mode 100644 index a80238e4e94f..000000000000 --- a/third_party/rust/euclid-0.10.5/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "euclid" -version = "0.10.5" -authors = ["The Servo Project Developers"] -description = "Geometry primitives" -documentation = "http://doc.servo.org/euclid/" -repository = "https://github.com/servo/euclid" -license = "MIT / Apache-2.0" - -[features] -unstable = [] - -[dependencies] -heapsize = "0.3" -rustc-serialize = "0.3.2" -num-traits = {version = "0.1.32", default-features = false} -log = "0.3.1" -serde = "0.8" - -[dev-dependencies] -rand = "0.3.7" -serde_test = "0.8" diff --git a/third_party/rust/euclid-0.10.5/LICENSE-APACHE b/third_party/rust/euclid-0.10.5/LICENSE-APACHE deleted file mode 100644 index 16fe87b06e80..000000000000 --- a/third_party/rust/euclid-0.10.5/LICENSE-APACHE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/third_party/rust/euclid-0.10.5/LICENSE-MIT b/third_party/rust/euclid-0.10.5/LICENSE-MIT deleted file mode 100644 index 807526f57f3a..000000000000 --- a/third_party/rust/euclid-0.10.5/LICENSE-MIT +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2012-2013 Mozilla Foundation - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/third_party/rust/euclid-0.10.5/README.md b/third_party/rust/euclid-0.10.5/README.md deleted file mode 100644 index 5d21d9e6e5e5..000000000000 --- a/third_party/rust/euclid-0.10.5/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# euclid - -This is a small library for geometric types. - -[Documentation](http://doc.servo.org/euclid/) diff --git a/third_party/rust/euclid-0.10.5/src/approxeq.rs b/third_party/rust/euclid-0.10.5/src/approxeq.rs deleted file mode 100644 index 10151110669a..000000000000 --- a/third_party/rust/euclid-0.10.5/src/approxeq.rs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - - -/// Trait for testing approximate equality -pub trait ApproxEq { - fn approx_epsilon() -> Eps; - fn approx_eq(&self, other: &Self) -> bool; - fn approx_eq_eps(&self, other: &Self, approx_epsilon: &Eps) -> bool; -} - -impl ApproxEq for f32 { - #[inline] - fn approx_epsilon() -> f32 { 1.0e-6 } - - #[inline] - fn approx_eq(&self, other: &f32) -> bool { - self.approx_eq_eps(other, &1.0e-6) - } - - #[inline] - fn approx_eq_eps(&self, other: &f32, approx_epsilon: &f32) -> bool { - (*self - *other).abs() < *approx_epsilon - } -} - - -impl ApproxEq for f64 { - #[inline] - fn approx_epsilon() -> f64 { 1.0e-6 } - - #[inline] - fn approx_eq(&self, other: &f64) -> bool { - self.approx_eq_eps(other, &1.0e-6) - } - - #[inline] - fn approx_eq_eps(&self, other: &f64, approx_epsilon: &f64) -> bool { - (*self - *other).abs() < *approx_epsilon - } -} diff --git a/third_party/rust/euclid-0.10.5/src/length.rs b/third_party/rust/euclid-0.10.5/src/length.rs deleted file mode 100644 index f2c89d3c91fc..000000000000 --- a/third_party/rust/euclid-0.10.5/src/length.rs +++ /dev/null @@ -1,448 +0,0 @@ -// Copyright 2014 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. -//! A one-dimensional length, tagged with its units. - -use scale_factor::ScaleFactor; -use num::Zero; - -use heapsize::HeapSizeOf; -use num_traits::{NumCast, Saturating}; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::cmp::Ordering; -use std::ops::{Add, Sub, Mul, Div, Neg}; -use std::ops::{AddAssign, SubAssign}; -use std::marker::PhantomData; -use std::fmt; - -/// A one-dimensional distance, with value represented by `T` and unit of measurement `Unit`. -/// -/// `T` can be any numeric type, for example a primitive type like u64 or f32. -/// -/// `Unit` is not used in the representation of a Length value. It is used only at compile time -/// to ensure that a Length stored with one unit is converted explicitly before being used in an -/// expression that requires a different unit. It may be a type without values, such as an empty -/// enum. -/// -/// You can multiply a Length by a `scale_factor::ScaleFactor` to convert it from one unit to -/// another. See the `ScaleFactor` docs for an example. -// Uncomment the derive, and remove the macro call, once heapsize gets -// PhantomData support. -#[derive(RustcDecodable, RustcEncodable)] -pub struct Length(pub T, PhantomData); - -impl Clone for Length { - fn clone(&self) -> Self { - Length(self.0.clone(), PhantomData) - } -} - -impl Copy for Length {} - -impl HeapSizeOf for Length { - fn heap_size_of_children(&self) -> usize { - self.0.heap_size_of_children() - } -} - -impl Deserialize for Length where T: Deserialize { - fn deserialize(deserializer: &mut D) -> Result,D::Error> - where D: Deserializer { - Ok(Length(try!(Deserialize::deserialize(deserializer)), PhantomData)) - } -} - -impl Serialize for Length where T: Serialize { - fn serialize(&self, serializer: &mut S) -> Result<(),S::Error> where S: Serializer { - self.0.serialize(serializer) - } -} - -impl Length { - pub fn new(x: T) -> Length { - Length(x, PhantomData) - } -} - -impl Length { - pub fn get(&self) -> T { - self.0.clone() - } -} - -impl fmt::Debug for Length { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.get().fmt(f) - } -} - -impl fmt::Display for Length { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.get().fmt(f) - } -} - -// length + length -impl> Add for Length { - type Output = Length; - fn add(self, other: Length) -> Length { - Length::new(self.get() + other.get()) - } -} - -// length += length -impl> AddAssign for Length { - fn add_assign(&mut self, other: Length) { - self.0 += other.get(); - } -} - -// length - length -impl> Sub> for Length { - type Output = Length; - fn sub(self, other: Length) -> ::Output { - Length::new(self.get() - other.get()) - } -} - -// length -= length -impl> SubAssign for Length { - fn sub_assign(&mut self, other: Length) { - self.0 -= other.get(); - } -} - -// Saturating length + length and length - length. -impl Saturating for Length { - fn saturating_add(self, other: Length) -> Length { - Length::new(self.get().saturating_add(other.get())) - } - - fn saturating_sub(self, other: Length) -> Length { - Length::new(self.get().saturating_sub(other.get())) - } -} - -// length / length -impl> Div> for Length { - type Output = ScaleFactor; - #[inline] - fn div(self, other: Length) -> ScaleFactor { - ScaleFactor::new(self.get() / other.get()) - } -} - -// length * scaleFactor -impl> Mul> for Length { - type Output = Length; - #[inline] - fn mul(self, scale: ScaleFactor) -> Length { - Length::new(self.get() * scale.get()) - } -} - -// length / scaleFactor -impl> Div> for Length { - type Output = Length; - #[inline] - fn div(self, scale: ScaleFactor) -> Length { - Length::new(self.get() / scale.get()) - } -} - -// -length -impl > Neg for Length { - type Output = Length; - #[inline] - fn neg(self) -> Length { - Length::new(-self.get()) - } -} - -impl Length { - /// Cast from one numeric representation to another, preserving the units. - pub fn cast(&self) -> Option> { - NumCast::from(self.get()).map(Length::new) - } -} - -impl PartialEq for Length { - fn eq(&self, other: &Length) -> bool { self.get().eq(&other.get()) } -} - -impl PartialOrd for Length { - fn partial_cmp(&self, other: &Length) -> Option { - self.get().partial_cmp(&other.get()) - } -} - -impl Eq for Length {} - -impl Ord for Length { - fn cmp(&self, other: &Length) -> Ordering { self.get().cmp(&other.get()) } -} - -impl Zero for Length { - fn zero() -> Length { - Length::new(Zero::zero()) - } -} - -#[cfg(test)] -mod tests { - use super::Length; - use num::Zero; - - use heapsize::HeapSizeOf; - use num_traits::Saturating; - use scale_factor::ScaleFactor; - use std::f32::INFINITY; - - extern crate serde_test; - use self::serde_test::Token; - use self::serde_test::assert_tokens; - - enum Inch {} - enum Mm {} - enum Cm {} - enum Second {} - - #[test] - fn test_clone() { - // A cloned Length is a separate length with the state matching the - // original Length at the point it was cloned. - let mut variable_length: Length = Length::new(12.0); - - let one_foot = variable_length.clone(); - variable_length.0 = 24.0; - - assert_eq!(one_foot.get(), 12.0); - assert_eq!(variable_length.get(), 24.0); - } - - #[test] - fn test_heapsizeof_builtins() { - // Heap size of built-ins is zero by default. - let one_foot: Length = Length::new(12.0); - - let heap_size_length_f32 = one_foot.heap_size_of_children(); - - assert_eq!(heap_size_length_f32, 0); - } - - #[test] - fn test_heapsizeof_length_vector() { - // Heap size of any Length is just the heap size of the length value. - for n in 0..5 { - let length: Length, Inch> = Length::new(Vec::with_capacity(n)); - - assert_eq!(length.heap_size_of_children(), length.0.heap_size_of_children()); - } - } - - #[test] - fn test_length_serde() { - let one_cm: Length = Length::new(10.0); - - assert_tokens(&one_cm, &[Token::F32(10.0)]); - } - - #[test] - fn test_get_clones_length_value() { - // Calling get returns a clone of the Length's value. - // To test this, we need something clone-able - hence a vector. - let mut length: Length, Inch> = Length::new(vec![1, 2, 3]); - - let value = length.get(); - length.0.push(4); - - assert_eq!(value, vec![1, 2, 3]); - assert_eq!(length.get(), vec![1, 2, 3, 4]); - } - - #[test] - fn test_fmt_debug() { - // Debug and display format the value only. - let one_cm: Length = Length::new(10.0); - - let result = format!("{:?}", one_cm); - - assert_eq!(result, "10"); - } - - #[test] - fn test_fmt_display() { - // Debug and display format the value only. - let one_cm: Length = Length::new(10.0); - - let result = format!("{}", one_cm); - - assert_eq!(result, "10"); - } - - #[test] - fn test_add() { - let length1: Length = Length::new(250); - let length2: Length = Length::new(5); - - let result = length1 + length2; - - assert_eq!(result.get(), 255); - } - - #[test] - fn test_addassign() { - let one_cm: Length = Length::new(10.0); - let mut measurement: Length = Length::new(5.0); - - measurement += one_cm; - - assert_eq!(measurement.get(), 15.0); - } - - #[test] - fn test_sub() { - let length1: Length = Length::new(250); - let length2: Length = Length::new(5); - - let result = length1 - length2; - - assert_eq!(result.get(), 245); - } - - #[test] - fn test_subassign() { - let one_cm: Length = Length::new(10.0); - let mut measurement: Length = Length::new(5.0); - - measurement -= one_cm; - - assert_eq!(measurement.get(), -5.0); - } - - #[test] - fn test_saturating_add() { - let length1: Length = Length::new(250); - let length2: Length = Length::new(6); - - let result = length1.saturating_add(length2); - - assert_eq!(result.get(), 255); - } - - #[test] - fn test_saturating_sub() { - let length1: Length = Length::new(5); - let length2: Length = Length::new(10); - - let result = length1.saturating_sub(length2); - - assert_eq!(result.get(), 0); - } - - #[test] - fn test_division_by_length() { - // Division results in a ScaleFactor from denominator units - // to numerator units. - let length: Length = Length::new(5.0); - let duration: Length = Length::new(10.0); - - let result = length / duration; - - let expected: ScaleFactor = ScaleFactor::new(0.5); - assert_eq!(result, expected); - } - - #[test] - fn test_multiplication() { - let length_mm: Length = Length::new(10.0); - let cm_per_mm: ScaleFactor = ScaleFactor::new(0.1); - - let result = length_mm * cm_per_mm; - - let expected: Length = Length::new(1.0); - assert_eq!(result, expected); - } - - #[test] - fn test_division_by_scalefactor() { - let length: Length = Length::new(5.0); - let cm_per_second: ScaleFactor = ScaleFactor::new(10.0); - - let result = length / cm_per_second; - - let expected: Length = Length::new(0.5); - assert_eq!(result, expected); - } - - #[test] - fn test_negation() { - let length: Length = Length::new(5.0); - - let result = -length; - - let expected: Length = Length::new(-5.0); - assert_eq!(result, expected); - } - - #[test] - fn test_cast() { - let length_as_i32: Length = Length::new(5); - - let result: Length = length_as_i32.cast().unwrap(); - - let length_as_f32: Length = Length::new(5.0); - assert_eq!(result, length_as_f32); - } - - #[test] - fn test_equality() { - let length_5_point_0: Length = Length::new(5.0); - let length_5_point_1: Length = Length::new(5.1); - let length_0_point_1: Length = Length::new(0.1); - - assert!(length_5_point_0 == length_5_point_1 - length_0_point_1); - assert!(length_5_point_0 != length_5_point_1); - } - - #[test] - fn test_order() { - let length_5_point_0: Length = Length::new(5.0); - let length_5_point_1: Length = Length::new(5.1); - let length_0_point_1: Length = Length::new(0.1); - - assert!(length_5_point_0 < length_5_point_1); - assert!(length_5_point_0 <= length_5_point_1); - assert!(length_5_point_0 <= length_5_point_1 - length_0_point_1); - assert!(length_5_point_1 > length_5_point_0); - assert!(length_5_point_1 >= length_5_point_0); - assert!(length_5_point_0 >= length_5_point_1 - length_0_point_1); - } - - #[test] - fn test_zero_add() { - type LengthCm = Length; - let length: LengthCm = Length::new(5.0); - - let result = length - LengthCm::zero(); - - assert_eq!(result, length); - } - - #[test] - fn test_zero_division() { - type LengthCm = Length; - let length: LengthCm = Length::new(5.0); - let length_zero: LengthCm = Length::zero(); - - let result = length / length_zero; - - let expected: ScaleFactor = ScaleFactor::new(INFINITY); - assert_eq!(result, expected); - } -} diff --git a/third_party/rust/euclid-0.10.5/src/lib.rs b/third_party/rust/euclid-0.10.5/src/lib.rs deleted file mode 100644 index 09a1e3e5c68d..000000000000 --- a/third_party/rust/euclid-0.10.5/src/lib.rs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#![cfg_attr(feature = "unstable", feature(asm, repr_simd, test))] - -//! A collection of strongly typed math tools for computer graphics with an inclination -//! towards 2d graphics and layout. -//! -//! All types are generic over the the scalar type of their component (f32, i32, etc.), -//! and tagged with a generic Unit parameter which is useful to prevent mixing -//! values from different spaces. For example it should not be legal to translate -//! a screen-space position by a world-space vector and this can be expressed using -//! the generic Unit parameter. -//! -//! This unit system is not mandatory and all Typed* structures have an alias -//! with the default unit: `UnknownUnit`. -//! for example ```Point2D``` is equivalent to ```TypedPoint2D```. -//! Client code typically creates a set of aliases for each type and doesn't need -//! to deal with the specifics of typed units further. For example: -//! -//! ```rust -//! use euclid::*; -//! pub struct ScreenSpace; -//! pub type ScreenPoint = TypedPoint2D; -//! pub type ScreenSize = TypedSize2D; -//! pub struct WorldSpace; -//! pub type WorldPoint = TypedPoint3D; -//! pub type ProjectionMatrix = TypedMatrix4D; -//! // etc... -//! ``` -//! -//! Components are accessed in their scalar form by default for convenience, and most -//! types additionally implement strongly typed accessors which return typed ```Length``` wrappers. -//! For example: -//! -//! ```rust -//! # use euclid::*; -//! # pub struct WorldSpace; -//! # pub type WorldPoint = TypedPoint3D; -//! let p = WorldPoint::new(0.0, 1.0, 1.0); -//! // p.x is an f32. -//! println!("p.x = {:?} ", p.x); -//! // p.x is a Length. -//! println!("p.x_typed() = {:?} ", p.x_typed()); -//! // Length::get returns the scalar value (f32). -//! assert_eq!(p.x, p.x_typed().get()); -//! ``` - -extern crate heapsize; - -#[macro_use] -extern crate log; -extern crate rustc_serialize; -extern crate serde; - -#[cfg(test)] -extern crate rand; -#[cfg(feature = "unstable")] -extern crate test; -extern crate num_traits; - -pub use length::Length; -pub use scale_factor::ScaleFactor; -pub use matrix2d::{Matrix2D, TypedMatrix2D}; -pub use matrix4d::{Matrix4D, TypedMatrix4D}; -pub use point::{ - Point2D, TypedPoint2D, - Point3D, TypedPoint3D, - Point4D, TypedPoint4D, -}; -pub use rect::{Rect, TypedRect}; -pub use side_offsets::{SideOffsets2D, TypedSideOffsets2D}; -#[cfg(feature = "unstable")] pub use side_offsets::SideOffsets2DSimdI32; -pub use size::{Size2D, TypedSize2D}; - -pub mod approxeq; -pub mod length; -#[macro_use] -mod macros; -pub mod matrix2d; -pub mod matrix4d; -pub mod num; -pub mod point; -pub mod rect; -pub mod scale_factor; -pub mod side_offsets; -pub mod size; -mod trig; - -/// The default unit. -#[derive(Clone, Copy, RustcDecodable, RustcEncodable)] -pub struct UnknownUnit; - -/// Unit for angles in radians. -pub struct Rad; - -/// Unit for angles in degrees. -pub struct Deg; - -/// A value in radians. -pub type Radians = Length; - -/// A value in Degrees. -pub type Degrees = Length; diff --git a/third_party/rust/euclid-0.10.5/src/macros.rs b/third_party/rust/euclid-0.10.5/src/macros.rs deleted file mode 100644 index 8984c4e12dfb..000000000000 --- a/third_party/rust/euclid-0.10.5/src/macros.rs +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -macro_rules! define_matrix { - ( - $(#[$attr:meta])* - pub struct $name:ident { - $(pub $field:ident: T,)+ - } - ) => ( - $(#[$attr])* - pub struct $name { - $(pub $field: T,)+ - _unit: PhantomData<($($phantom),+)> - } - - impl Clone for $name { - fn clone(&self) -> Self { - $name { - $($field: self.$field.clone(),)+ - _unit: PhantomData, - } - } - } - - impl Copy for $name {} - - impl ::heapsize::HeapSizeOf for $name - where T: ::heapsize::HeapSizeOf - { - fn heap_size_of_children(&self) -> usize { - $(self.$field.heap_size_of_children() +)+ 0 - } - } - - impl ::serde::Deserialize for $name - where T: ::serde::Deserialize - { - fn deserialize(deserializer: &mut D) -> Result - where D: ::serde::Deserializer - { - let ($($field,)+) = - try!(::serde::Deserialize::deserialize(deserializer)); - Ok($name { - $($field: $field,)+ - _unit: PhantomData, - }) - } - } - - impl ::serde::Serialize for $name - where T: ::serde::Serialize - { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: ::serde::Serializer - { - ($(&self.$field,)+).serialize(serializer) - } - } - - impl ::std::cmp::Eq for $name - where T: ::std::cmp::Eq {} - - impl ::std::cmp::PartialEq for $name - where T: ::std::cmp::PartialEq - { - fn eq(&self, other: &Self) -> bool { - true $(&& self.$field == other.$field)+ - } - } - - impl ::std::hash::Hash for $name - where T: ::std::hash::Hash - { - fn hash(&self, h: &mut H) { - $(self.$field.hash(h);)+ - } - } - ) -} diff --git a/third_party/rust/euclid-0.10.5/src/matrix2d.rs b/third_party/rust/euclid-0.10.5/src/matrix2d.rs deleted file mode 100644 index c75e2bf3295b..000000000000 --- a/third_party/rust/euclid-0.10.5/src/matrix2d.rs +++ /dev/null @@ -1,404 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use super::{UnknownUnit, Radians}; -use num::{One, Zero}; -use point::TypedPoint2D; -use rect::TypedRect; -use std::ops::{Add, Mul, Div, Sub}; -use std::marker::PhantomData; -use approxeq::ApproxEq; -use trig::Trig; -use std::fmt; - -define_matrix! { - /// A 2d transform stored as a 2 by 3 matrix in row-major order in memory, - /// useful to represent 2d transformations. - /// - /// Matrices can be parametrized over the source and destination units, to describe a - /// transformation from a space to another. - /// For example, TypedMatrix2D::transform_point4d - /// takes a TypedPoint2D and returns a TypedPoint2D. - /// - /// Matrices expose a set of convenience methods for pre- and post-transformations. - /// A pre-transformation corresponds to adding an operation that is applied before - /// the rest of the transformation, while a post-transformation adds an operation - /// that is appled after. - pub struct TypedMatrix2D { - pub m11: T, pub m12: T, - pub m21: T, pub m22: T, - pub m31: T, pub m32: T, - } -} - -/// The default 2d matrix type with no units. -pub type Matrix2D = TypedMatrix2D; - -impl TypedMatrix2D { - /// Create a matrix specifying its components in row-major order. - pub fn row_major(m11: T, m12: T, m21: T, m22: T, m31: T, m32: T) -> TypedMatrix2D { - TypedMatrix2D { - m11: m11, m12: m12, - m21: m21, m22: m22, - m31: m31, m32: m32, - _unit: PhantomData, - } - } - - /// Create a matrix specifying its components in column-major order. - pub fn column_major(m11: T, m21: T, m31: T, m12: T, m22: T, m32: T) -> TypedMatrix2D { - TypedMatrix2D { - m11: m11, m12: m12, - m21: m21, m22: m22, - m31: m31, m32: m32, - _unit: PhantomData, - } - } - - /// Returns an array containing this matrix's terms in row-major order (the order - /// in which the matrix is actually laid out in memory). - pub fn to_row_major_array(&self) -> [T; 6] { - [ - self.m11, self.m12, - self.m21, self.m22, - self.m31, self.m32 - ] - } - - /// Returns an array containing this matrix's terms in column-major order. - pub fn to_column_major_array(&self) -> [T; 6] { - [ - self.m11, self.m21, self.m31, - self.m12, self.m22, self.m32 - ] - } - - /// Drop the units, preserving only the numeric value. - pub fn to_untyped(&self) -> Matrix2D { - Matrix2D::row_major( - self.m11, self.m12, - self.m21, self.m22, - self.m31, self.m32 - ) - } - - /// Tag a unitless value with units. - pub fn from_untyped(p: &Matrix2D) -> TypedMatrix2D { - TypedMatrix2D::row_major( - p.m11, p.m12, - p.m21, p.m22, - p.m31, p.m32 - ) - } -} - -impl TypedMatrix2D -where T: Copy + Clone + - Add + - Mul + - Div + - Sub + - Trig + - PartialOrd + - One + Zero { - - pub fn identity() -> TypedMatrix2D { - let (_0, _1) = (Zero::zero(), One::one()); - TypedMatrix2D::row_major( - _1, _0, - _0, _1, - _0, _0 - ) - } - - /// Returns the multiplication of the two matrices such that mat's transformation - /// applies after self's transformation. - pub fn post_mul(&self, mat: &TypedMatrix2D) -> TypedMatrix2D { - TypedMatrix2D::row_major( - self.m11 * mat.m11 + self.m12 * mat.m21, - self.m11 * mat.m12 + self.m12 * mat.m22, - self.m21 * mat.m11 + self.m22 * mat.m21, - self.m21 * mat.m12 + self.m22 * mat.m22, - self.m31 * mat.m11 + self.m32 * mat.m21 + mat.m31, - self.m31 * mat.m12 + self.m32 * mat.m22 + mat.m32, - ) - } - - /// Returns the multiplication of the two matrices such that mat's transformation - /// applies before self's transformation. - pub fn pre_mul(&self, mat: &TypedMatrix2D) -> TypedMatrix2D { - mat.post_mul(self) - } - - /// Returns a translation matrix. - pub fn create_translation(x: T, y: T) -> TypedMatrix2D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - TypedMatrix2D::row_major( - _1, _0, - _0, _1, - x, y - ) - } - - /// Applies a translation after self's transformation and returns the resulting matrix. - pub fn post_translated(&self, x: T, y: T) -> TypedMatrix2D { - self.post_mul(&TypedMatrix2D::create_translation(x, y)) - } - - /// Applies a translation before self's transformation and returns the resulting matrix. - pub fn pre_translated(&self, x: T, y: T) -> TypedMatrix2D { - self.pre_mul(&TypedMatrix2D::create_translation(x, y)) - } - - /// Returns a scale matrix. - pub fn create_scale(x: T, y: T) -> TypedMatrix2D { - let _0 = Zero::zero(); - TypedMatrix2D::row_major( - x, _0, - _0, y, - _0, _0 - ) - } - - /// Applies a scale after self's transformation and returns the resulting matrix. - pub fn post_scaled(&self, x: T, y: T) -> TypedMatrix2D { - self.post_mul(&TypedMatrix2D::create_scale(x, y)) - } - - /// Applies a scale before self's transformation and returns the resulting matrix. - pub fn pre_scaled(&self, x: T, y: T) -> TypedMatrix2D { - TypedMatrix2D::row_major( - self.m11 * x, self.m12, - self.m21, self.m22 * y, - self.m31, self.m32 - ) - } - - /// Returns a rotation matrix. - pub fn create_rotation(theta: Radians) -> TypedMatrix2D { - let _0 = Zero::zero(); - let cos = theta.get().cos(); - let sin = theta.get().sin(); - TypedMatrix2D::row_major( - cos, _0 - sin, - sin, cos, - _0, _0 - ) - } - - /// Applies a rotation after self's transformation and returns the resulting matrix. - pub fn post_rotated(&self, theta: Radians) -> TypedMatrix2D { - self.post_mul(&TypedMatrix2D::create_rotation(theta)) - } - - /// Applies a rotation after self's transformation and returns the resulting matrix. - pub fn pre_rotated(&self, theta: Radians) -> TypedMatrix2D { - self.pre_mul(&TypedMatrix2D::create_rotation(theta)) - } - - /// Returns the given point transformed by this matrix. - #[inline] - pub fn transform_point(&self, point: &TypedPoint2D) -> TypedPoint2D { - TypedPoint2D::new(point.x * self.m11 + point.y * self.m21 + self.m31, - point.x * self.m12 + point.y * self.m22 + self.m32) - } - - /// Returns a rectangle that encompasses the result of transforming the given rectangle by this - /// matrix. - #[inline] - pub fn transform_rect(&self, rect: &TypedRect) -> TypedRect { - TypedRect::from_points(&[ - self.transform_point(&rect.origin), - self.transform_point(&rect.top_right()), - self.transform_point(&rect.bottom_left()), - self.transform_point(&rect.bottom_right()), - ]) - } - - /// Computes and returns the determinant of this matrix. - pub fn determinant(&self) -> T { - self.m11 * self.m22 - self.m12 * self.m21 - } - - /// Returns the inverse matrix if possible. - pub fn inverse(&self) -> Option> { - let det = self.determinant(); - - let _0: T = Zero::zero(); - let _1: T = One::one(); - - if det == _0 { - return None; - } - - let inv_det = _1 / det; - Some(TypedMatrix2D::row_major( - inv_det * self.m22, - inv_det * (_0 - self.m12), - inv_det * (_0 - self.m21), - inv_det * self.m11, - inv_det * (self.m21 * self.m32 - self.m22 * self.m31), - inv_det * (self.m31 * self.m12 - self.m11 * self.m32), - )) - } - - /// Returns the same matrix with a different destination unit. - #[inline] - pub fn with_destination(&self) -> TypedMatrix2D { - TypedMatrix2D::row_major( - self.m11, self.m12, - self.m21, self.m22, - self.m31, self.m32, - ) - } - - /// Returns the same matrix with a different source unit. - #[inline] - pub fn with_source(&self) -> TypedMatrix2D { - TypedMatrix2D::row_major( - self.m11, self.m12, - self.m21, self.m22, - self.m31, self.m32, - ) - } -} - -impl, Src, Dst> TypedMatrix2D { - pub fn approx_eq(&self, other: &Self) -> bool { - self.m11.approx_eq(&other.m11) && self.m12.approx_eq(&other.m12) && - self.m21.approx_eq(&other.m21) && self.m22.approx_eq(&other.m22) && - self.m31.approx_eq(&other.m31) && self.m32.approx_eq(&other.m32) - } -} - -impl fmt::Debug for TypedMatrix2D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.to_row_major_array().fmt(f) - } -} - -#[cfg(test)] -mod test { - use super::*; - use approxeq::ApproxEq; - use point::Point2D; - use Radians; - - use std::f32::consts::FRAC_PI_2; - - type Mat = Matrix2D; - - fn rad(v: f32) -> Radians { Radians::new(v) } - - #[test] - pub fn test_translation() { - let t1 = Mat::create_translation(1.0, 2.0); - let t2 = Mat::identity().pre_translated(1.0, 2.0); - let t3 = Mat::identity().post_translated(1.0, 2.0); - assert_eq!(t1, t2); - assert_eq!(t1, t3); - - assert_eq!(t1.transform_point(&Point2D::new(1.0, 1.0)), Point2D::new(2.0, 3.0)); - - assert_eq!(t1.post_mul(&t1), Mat::create_translation(2.0, 4.0)); - } - - #[test] - pub fn test_rotation() { - let r1 = Mat::create_rotation(rad(FRAC_PI_2)); - let r2 = Mat::identity().pre_rotated(rad(FRAC_PI_2)); - let r3 = Mat::identity().post_rotated(rad(FRAC_PI_2)); - assert_eq!(r1, r2); - assert_eq!(r1, r3); - - assert!(r1.transform_point(&Point2D::new(1.0, 2.0)).approx_eq(&Point2D::new(2.0, -1.0))); - - assert!(r1.post_mul(&r1).approx_eq(&Mat::create_rotation(rad(FRAC_PI_2*2.0)))); - } - - #[test] - pub fn test_scale() { - let s1 = Mat::create_scale(2.0, 3.0); - let s2 = Mat::identity().pre_scaled(2.0, 3.0); - let s3 = Mat::identity().post_scaled(2.0, 3.0); - assert_eq!(s1, s2); - assert_eq!(s1, s3); - - assert!(s1.transform_point(&Point2D::new(2.0, 2.0)).approx_eq(&Point2D::new(4.0, 6.0))); - } - - #[test] - fn test_column_major() { - assert_eq!( - Mat::row_major( - 1.0, 2.0, - 3.0, 4.0, - 5.0, 6.0 - ), - Mat::column_major( - 1.0, 3.0, 5.0, - 2.0, 4.0, 6.0, - ) - ); - } - - #[test] - pub fn test_inverse_simple() { - let m1 = Mat::identity(); - let m2 = m1.inverse().unwrap(); - assert!(m1.approx_eq(&m2)); - } - - #[test] - pub fn test_inverse_scale() { - let m1 = Mat::create_scale(1.5, 0.3); - let m2 = m1.inverse().unwrap(); - assert!(m1.pre_mul(&m2).approx_eq(&Mat::identity())); - } - - #[test] - pub fn test_inverse_translate() { - let m1 = Mat::create_translation(-132.0, 0.3); - let m2 = m1.inverse().unwrap(); - assert!(m1.pre_mul(&m2).approx_eq(&Mat::identity())); - } - - #[test] - fn test_inverse_none() { - assert!(Mat::create_scale(2.0, 0.0).inverse().is_none()); - assert!(Mat::create_scale(2.0, 2.0).inverse().is_some()); - } - - #[test] - pub fn test_pre_post() { - let m1 = Matrix2D::identity().post_scaled(1.0, 2.0).post_translated(1.0, 2.0); - let m2 = Matrix2D::identity().pre_translated(1.0, 2.0).pre_scaled(1.0, 2.0); - assert!(m1.approx_eq(&m2)); - - let r = Mat::create_rotation(rad(FRAC_PI_2)); - let t = Mat::create_translation(2.0, 3.0); - - let a = Point2D::new(1.0, 1.0); - - assert!(r.post_mul(&t).transform_point(&a).approx_eq(&Point2D::new(3.0, 2.0))); - assert!(t.post_mul(&r).transform_point(&a).approx_eq(&Point2D::new(4.0, -3.0))); - assert!(t.post_mul(&r).transform_point(&a).approx_eq(&r.transform_point(&t.transform_point(&a)))); - - assert!(r.pre_mul(&t).transform_point(&a).approx_eq(&Point2D::new(4.0, -3.0))); - assert!(t.pre_mul(&r).transform_point(&a).approx_eq(&Point2D::new(3.0, 2.0))); - assert!(t.pre_mul(&r).transform_point(&a).approx_eq(&t.transform_point(&r.transform_point(&a)))); - } - - #[test] - fn test_size_of() { - use std::mem::size_of; - assert_eq!(size_of::>(), 6*size_of::()); - assert_eq!(size_of::>(), 6*size_of::()); - } -} \ No newline at end of file diff --git a/third_party/rust/euclid-0.10.5/src/matrix4d.rs b/third_party/rust/euclid-0.10.5/src/matrix4d.rs deleted file mode 100644 index fb5b9d419684..000000000000 --- a/third_party/rust/euclid-0.10.5/src/matrix4d.rs +++ /dev/null @@ -1,797 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use super::{UnknownUnit, Radians}; -use approxeq::ApproxEq; -use trig::Trig; -use point::{TypedPoint2D, TypedPoint3D, TypedPoint4D}; -use rect::TypedRect; -use matrix2d::TypedMatrix2D; -use scale_factor::ScaleFactor; -use num::{One, Zero}; -use std::ops::{Add, Mul, Sub, Div, Neg}; -use std::marker::PhantomData; -use std::fmt; - -define_matrix! { - /// A 4 by 4 matrix stored in row-major order in memory, useful to represent - /// 3d transformations. - /// - /// Matrices can be parametrized over the source and destination units, to describe a - /// transformation from a space to another. - /// For example, TypedMatrix4D::transform_point4d - /// takes a TypedPoint4D and returns a TypedPoint4D. - /// - /// Matrices expose a set of convenience methods for pre- and post-transformations. - /// A pre-transformation corresponds to adding an operation that is applied before - /// the rest of the transformation, while a post-transformation adds an operation - /// that is appled after. - pub struct TypedMatrix4D { - pub m11: T, pub m12: T, pub m13: T, pub m14: T, - pub m21: T, pub m22: T, pub m23: T, pub m24: T, - pub m31: T, pub m32: T, pub m33: T, pub m34: T, - pub m41: T, pub m42: T, pub m43: T, pub m44: T, - } -} - -/// The default 4d matrix type with no units. -pub type Matrix4D = TypedMatrix4D; - -impl TypedMatrix4D { - /// Create a matrix specifying its components in row-major order. - /// - /// For example, the translation terms m41, m42, m43 on the last row with the - /// row-major convention) are the 13rd, 14th and 15th parameters. - #[inline] - pub fn row_major( - m11: T, m12: T, m13: T, m14: T, - m21: T, m22: T, m23: T, m24: T, - m31: T, m32: T, m33: T, m34: T, - m41: T, m42: T, m43: T, m44: T) - -> TypedMatrix4D { - TypedMatrix4D { - m11: m11, m12: m12, m13: m13, m14: m14, - m21: m21, m22: m22, m23: m23, m24: m24, - m31: m31, m32: m32, m33: m33, m34: m34, - m41: m41, m42: m42, m43: m43, m44: m44, - _unit: PhantomData, - } - } - - /// Create a matrix specifying its components in column-major order. - /// - /// For example, the translation terms m41, m42, m43 on the last column with the - /// column-major convention) are the 4th, 8th and 12nd parameters. - #[inline] - pub fn column_major( - m11: T, m21: T, m31: T, m41: T, - m12: T, m22: T, m32: T, m42: T, - m13: T, m23: T, m33: T, m43: T, - m14: T, m24: T, m34: T, m44: T) - -> TypedMatrix4D { - TypedMatrix4D { - m11: m11, m12: m12, m13: m13, m14: m14, - m21: m21, m22: m22, m23: m23, m24: m24, - m31: m31, m32: m32, m33: m33, m34: m34, - m41: m41, m42: m42, m43: m43, m44: m44, - _unit: PhantomData, - } - } -} - -impl TypedMatrix4D -where T: Copy + Clone + - Add + - Sub + - Mul + - Div + - Neg + - ApproxEq + - PartialOrd + - Trig + - One + Zero { - - /// Create a 4 by 4 matrix representing a 2d transformation, specifying its components - /// in row-major order. - #[inline] - pub fn row_major_2d(m11: T, m12: T, m21: T, m22: T, m41: T, m42: T) -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - TypedMatrix4D::row_major( - m11, m12, _0, _0, - m21, m22, _0, _0, - _0, _0, _1, _0, - m41, m42, _0, _1 - ) - } - - /// Create an orthogonal projection matrix. - pub fn ortho(left: T, right: T, - bottom: T, top: T, - near: T, far: T) -> TypedMatrix4D { - let tx = -((right + left) / (right - left)); - let ty = -((top + bottom) / (top - bottom)); - let tz = -((far + near) / (far - near)); - - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - let _2 = _1 + _1; - TypedMatrix4D::row_major( - _2 / (right - left), _0 , _0 , _0, - _0 , _2 / (top - bottom), _0 , _0, - _0 , _0 , -_2 / (far - near), _0, - tx , ty , tz , _1 - ) - } - - #[inline] - pub fn identity() -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - TypedMatrix4D::row_major( - _1, _0, _0, _0, - _0, _1, _0, _0, - _0, _0, _1, _0, - _0, _0, _0, _1 - ) - } - - /// Returns true if this matrix can be represented with a TypedMatrix2D. - /// - /// See https://drafts.csswg.org/css-transforms/#2d-matrix - #[inline] - pub fn is_2d(&self) -> bool { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - self.m31 == _0 && self.m32 == _0 && - self.m13 == _0 && self.m23 == _0 && - self.m43 == _0 && self.m14 == _0 && - self.m24 == _0 && self.m34 == _0 && - self.m33 == _1 && self.m44 == _1 - } - - /// Create a 2D matrix picking the relevent terms from this matrix. - /// - /// This method assumes that self represents a 2d transformation, callers - /// should check that self.is_2d() returns true beforehand. - pub fn to_2d(&self) -> TypedMatrix2D { - TypedMatrix2D::row_major( - self.m11, self.m12, - self.m21, self.m22, - self.m41, self.m42 - ) - } - - pub fn approx_eq(&self, other: &TypedMatrix4D) -> bool { - self.m11.approx_eq(&other.m11) && self.m12.approx_eq(&other.m12) && - self.m13.approx_eq(&other.m13) && self.m14.approx_eq(&other.m14) && - self.m21.approx_eq(&other.m21) && self.m22.approx_eq(&other.m22) && - self.m23.approx_eq(&other.m23) && self.m24.approx_eq(&other.m24) && - self.m31.approx_eq(&other.m31) && self.m32.approx_eq(&other.m32) && - self.m33.approx_eq(&other.m33) && self.m34.approx_eq(&other.m34) && - self.m41.approx_eq(&other.m41) && self.m42.approx_eq(&other.m42) && - self.m43.approx_eq(&other.m43) && self.m44.approx_eq(&other.m44) - } - - /// Returns the same matrix with a different destination unit. - #[inline] - pub fn with_destination(&self) -> TypedMatrix4D { - TypedMatrix4D::row_major( - self.m11, self.m12, self.m13, self.m14, - self.m21, self.m22, self.m23, self.m24, - self.m31, self.m32, self.m33, self.m34, - self.m41, self.m42, self.m43, self.m44, - ) - } - - /// Returns the same matrix with a different source unit. - #[inline] - pub fn with_source(&self) -> TypedMatrix4D { - TypedMatrix4D::row_major( - self.m11, self.m12, self.m13, self.m14, - self.m21, self.m22, self.m23, self.m24, - self.m31, self.m32, self.m33, self.m34, - self.m41, self.m42, self.m43, self.m44, - ) - } - - /// Drop the units, preserving only the numeric value. - #[inline] - pub fn to_untyped(&self) -> Matrix4D { - Matrix4D::row_major( - self.m11, self.m12, self.m13, self.m14, - self.m21, self.m22, self.m23, self.m24, - self.m31, self.m32, self.m33, self.m34, - self.m41, self.m42, self.m43, self.m44, - ) - } - - /// Tag a unitless value with units. - #[inline] - pub fn from_untyped(m: &Matrix4D) -> Self { - TypedMatrix4D::row_major( - m.m11, m.m12, m.m13, m.m14, - m.m21, m.m22, m.m23, m.m24, - m.m31, m.m32, m.m33, m.m34, - m.m41, m.m42, m.m43, m.m44, - ) - } - - /// Returns the multiplication of the two matrices such that mat's transformation - /// applies after self's transformation. - pub fn post_mul(&self, mat: &TypedMatrix4D) -> TypedMatrix4D { - TypedMatrix4D::row_major( - self.m11 * mat.m11 + self.m12 * mat.m21 + self.m13 * mat.m31 + self.m14 * mat.m41, - self.m11 * mat.m12 + self.m12 * mat.m22 + self.m13 * mat.m32 + self.m14 * mat.m42, - self.m11 * mat.m13 + self.m12 * mat.m23 + self.m13 * mat.m33 + self.m14 * mat.m43, - self.m11 * mat.m14 + self.m12 * mat.m24 + self.m13 * mat.m34 + self.m14 * mat.m44, - self.m21 * mat.m11 + self.m22 * mat.m21 + self.m23 * mat.m31 + self.m24 * mat.m41, - self.m21 * mat.m12 + self.m22 * mat.m22 + self.m23 * mat.m32 + self.m24 * mat.m42, - self.m21 * mat.m13 + self.m22 * mat.m23 + self.m23 * mat.m33 + self.m24 * mat.m43, - self.m21 * mat.m14 + self.m22 * mat.m24 + self.m23 * mat.m34 + self.m24 * mat.m44, - self.m31 * mat.m11 + self.m32 * mat.m21 + self.m33 * mat.m31 + self.m34 * mat.m41, - self.m31 * mat.m12 + self.m32 * mat.m22 + self.m33 * mat.m32 + self.m34 * mat.m42, - self.m31 * mat.m13 + self.m32 * mat.m23 + self.m33 * mat.m33 + self.m34 * mat.m43, - self.m31 * mat.m14 + self.m32 * mat.m24 + self.m33 * mat.m34 + self.m34 * mat.m44, - self.m41 * mat.m11 + self.m42 * mat.m21 + self.m43 * mat.m31 + self.m44 * mat.m41, - self.m41 * mat.m12 + self.m42 * mat.m22 + self.m43 * mat.m32 + self.m44 * mat.m42, - self.m41 * mat.m13 + self.m42 * mat.m23 + self.m43 * mat.m33 + self.m44 * mat.m43, - self.m41 * mat.m14 + self.m42 * mat.m24 + self.m43 * mat.m34 + self.m44 * mat.m44, - ) - } - - /// Returns the multiplication of the two matrices such that mat's transformation - /// applies before self's transformation. - pub fn pre_mul(&self, mat: &TypedMatrix4D) -> TypedMatrix4D { - mat.post_mul(self) - } - - /// Returns the inverse matrix if possible. - pub fn inverse(&self) -> Option> { - let det = self.determinant(); - - if det == Zero::zero() { - return None; - } - - // todo(gw): this could be made faster by special casing - // for simpler matrix types. - let m = TypedMatrix4D::row_major( - self.m23*self.m34*self.m42 - self.m24*self.m33*self.m42 + - self.m24*self.m32*self.m43 - self.m22*self.m34*self.m43 - - self.m23*self.m32*self.m44 + self.m22*self.m33*self.m44, - - self.m14*self.m33*self.m42 - self.m13*self.m34*self.m42 - - self.m14*self.m32*self.m43 + self.m12*self.m34*self.m43 + - self.m13*self.m32*self.m44 - self.m12*self.m33*self.m44, - - self.m13*self.m24*self.m42 - self.m14*self.m23*self.m42 + - self.m14*self.m22*self.m43 - self.m12*self.m24*self.m43 - - self.m13*self.m22*self.m44 + self.m12*self.m23*self.m44, - - self.m14*self.m23*self.m32 - self.m13*self.m24*self.m32 - - self.m14*self.m22*self.m33 + self.m12*self.m24*self.m33 + - self.m13*self.m22*self.m34 - self.m12*self.m23*self.m34, - - self.m24*self.m33*self.m41 - self.m23*self.m34*self.m41 - - self.m24*self.m31*self.m43 + self.m21*self.m34*self.m43 + - self.m23*self.m31*self.m44 - self.m21*self.m33*self.m44, - - self.m13*self.m34*self.m41 - self.m14*self.m33*self.m41 + - self.m14*self.m31*self.m43 - self.m11*self.m34*self.m43 - - self.m13*self.m31*self.m44 + self.m11*self.m33*self.m44, - - self.m14*self.m23*self.m41 - self.m13*self.m24*self.m41 - - self.m14*self.m21*self.m43 + self.m11*self.m24*self.m43 + - self.m13*self.m21*self.m44 - self.m11*self.m23*self.m44, - - self.m13*self.m24*self.m31 - self.m14*self.m23*self.m31 + - self.m14*self.m21*self.m33 - self.m11*self.m24*self.m33 - - self.m13*self.m21*self.m34 + self.m11*self.m23*self.m34, - - self.m22*self.m34*self.m41 - self.m24*self.m32*self.m41 + - self.m24*self.m31*self.m42 - self.m21*self.m34*self.m42 - - self.m22*self.m31*self.m44 + self.m21*self.m32*self.m44, - - self.m14*self.m32*self.m41 - self.m12*self.m34*self.m41 - - self.m14*self.m31*self.m42 + self.m11*self.m34*self.m42 + - self.m12*self.m31*self.m44 - self.m11*self.m32*self.m44, - - self.m12*self.m24*self.m41 - self.m14*self.m22*self.m41 + - self.m14*self.m21*self.m42 - self.m11*self.m24*self.m42 - - self.m12*self.m21*self.m44 + self.m11*self.m22*self.m44, - - self.m14*self.m22*self.m31 - self.m12*self.m24*self.m31 - - self.m14*self.m21*self.m32 + self.m11*self.m24*self.m32 + - self.m12*self.m21*self.m34 - self.m11*self.m22*self.m34, - - self.m23*self.m32*self.m41 - self.m22*self.m33*self.m41 - - self.m23*self.m31*self.m42 + self.m21*self.m33*self.m42 + - self.m22*self.m31*self.m43 - self.m21*self.m32*self.m43, - - self.m12*self.m33*self.m41 - self.m13*self.m32*self.m41 + - self.m13*self.m31*self.m42 - self.m11*self.m33*self.m42 - - self.m12*self.m31*self.m43 + self.m11*self.m32*self.m43, - - self.m13*self.m22*self.m41 - self.m12*self.m23*self.m41 - - self.m13*self.m21*self.m42 + self.m11*self.m23*self.m42 + - self.m12*self.m21*self.m43 - self.m11*self.m22*self.m43, - - self.m12*self.m23*self.m31 - self.m13*self.m22*self.m31 + - self.m13*self.m21*self.m32 - self.m11*self.m23*self.m32 - - self.m12*self.m21*self.m33 + self.m11*self.m22*self.m33 - ); - - let _1: T = One::one(); - Some(m.mul_s(_1 / det)) - } - - /// Compute the determinant of the matrix. - pub fn determinant(&self) -> T { - self.m14 * self.m23 * self.m32 * self.m41 - - self.m13 * self.m24 * self.m32 * self.m41 - - self.m14 * self.m22 * self.m33 * self.m41 + - self.m12 * self.m24 * self.m33 * self.m41 + - self.m13 * self.m22 * self.m34 * self.m41 - - self.m12 * self.m23 * self.m34 * self.m41 - - self.m14 * self.m23 * self.m31 * self.m42 + - self.m13 * self.m24 * self.m31 * self.m42 + - self.m14 * self.m21 * self.m33 * self.m42 - - self.m11 * self.m24 * self.m33 * self.m42 - - self.m13 * self.m21 * self.m34 * self.m42 + - self.m11 * self.m23 * self.m34 * self.m42 + - self.m14 * self.m22 * self.m31 * self.m43 - - self.m12 * self.m24 * self.m31 * self.m43 - - self.m14 * self.m21 * self.m32 * self.m43 + - self.m11 * self.m24 * self.m32 * self.m43 + - self.m12 * self.m21 * self.m34 * self.m43 - - self.m11 * self.m22 * self.m34 * self.m43 - - self.m13 * self.m22 * self.m31 * self.m44 + - self.m12 * self.m23 * self.m31 * self.m44 + - self.m13 * self.m21 * self.m32 * self.m44 - - self.m11 * self.m23 * self.m32 * self.m44 - - self.m12 * self.m21 * self.m33 * self.m44 + - self.m11 * self.m22 * self.m33 * self.m44 - } - - /// Multiplies all of the matrix's component by a scalar and returns the result. - pub fn mul_s(&self, x: T) -> TypedMatrix4D { - TypedMatrix4D::row_major( - self.m11 * x, self.m12 * x, self.m13 * x, self.m14 * x, - self.m21 * x, self.m22 * x, self.m23 * x, self.m24 * x, - self.m31 * x, self.m32 * x, self.m33 * x, self.m34 * x, - self.m41 * x, self.m42 * x, self.m43 * x, self.m44 * x - ) - } - - /// Convenience function to create a scale matrix from a ScaleFactor. - pub fn from_scale_factor(scale: ScaleFactor) -> TypedMatrix4D { - TypedMatrix4D::create_scale(scale.get(), scale.get(), scale.get()) - } - - /// Returns the given 2d point transformed by this matrix. - /// - /// The input point must be use the unit Src, and the returned point has the unit Dst. - #[inline] - pub fn transform_point(&self, p: &TypedPoint2D) -> TypedPoint2D { - self.transform_point4d(&TypedPoint4D::new(p.x, p.y, Zero::zero(), One::one())).to_2d() - } - - /// Returns the given 3d point transformed by this matrix. - /// - /// The input point must be use the unit Src, and the returned point has the unit Dst. - #[inline] - pub fn transform_point3d(&self, p: &TypedPoint3D) -> TypedPoint3D { - self.transform_point4d(&TypedPoint4D::new(p.x, p.y, p.z, One::one())).to_3d() - } - - /// Returns the given 4d point transformed by this matrix. - /// - /// The input point must be use the unit Src, and the returned point has the unit Dst. - #[inline] - pub fn transform_point4d(&self, p: &TypedPoint4D) -> TypedPoint4D { - let x = p.x * self.m11 + p.y * self.m21 + p.z * self.m31 + p.w * self.m41; - let y = p.x * self.m12 + p.y * self.m22 + p.z * self.m32 + p.w * self.m42; - let z = p.x * self.m13 + p.y * self.m23 + p.z * self.m33 + p.w * self.m43; - let w = p.x * self.m14 + p.y * self.m24 + p.z * self.m34 + p.w * self.m44; - TypedPoint4D::new(x, y, z, w) - } - - /// Returns a rectangle that encompasses the result of transforming the given rectangle by this - /// matrix. - pub fn transform_rect(&self, rect: &TypedRect) -> TypedRect { - TypedRect::from_points(&[ - self.transform_point(&rect.origin), - self.transform_point(&rect.top_right()), - self.transform_point(&rect.bottom_left()), - self.transform_point(&rect.bottom_right()), - ]) - } - - /// Create a 3d translation matrix - pub fn create_translation(x: T, y: T, z: T) -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - TypedMatrix4D::row_major( - _1, _0, _0, _0, - _0, _1, _0, _0, - _0, _0, _1, _0, - x, y, z, _1 - ) - } - - /// Returns a matrix with a translation applied before self's transformation. - pub fn pre_translated(&self, x: T, y: T, z: T) -> TypedMatrix4D { - self.pre_mul(&TypedMatrix4D::create_translation(x, y, z)) - } - - /// Returns a matrix with a translation applied after self's transformation. - pub fn post_translated(&self, x: T, y: T, z: T) -> TypedMatrix4D { - self.post_mul(&TypedMatrix4D::create_translation(x, y, z)) - } - - /// Create a 3d scale matrix - pub fn create_scale(x: T, y: T, z: T) -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - TypedMatrix4D::row_major( - x, _0, _0, _0, - _0, y, _0, _0, - _0, _0, z, _0, - _0, _0, _0, _1 - ) - } - - /// Returns a matrix with a scale applied before self's transformation. - pub fn pre_scaled(&self, x: T, y: T, z: T) -> TypedMatrix4D { - TypedMatrix4D::row_major( - self.m11 * x, self.m12, self.m13, self.m14, - self.m21 , self.m22 * y, self.m23, self.m24, - self.m31 , self.m32, self.m33 * z, self.m34, - self.m41 , self.m42, self.m43, self.m44 - ) - } - - /// Returns a matrix with a scale applied after self's transformation. - pub fn post_scaled(&self, x: T, y: T, z: T) -> TypedMatrix4D { - self.post_mul(&TypedMatrix4D::create_scale(x, y, z)) - } - - /// Create a 3d rotation matrix from an angle / axis. - /// The supplied axis must be normalized. - pub fn create_rotation(x: T, y: T, z: T, theta: Radians) -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - let _2 = _1 + _1; - - let xx = x * x; - let yy = y * y; - let zz = z * z; - - let half_theta = theta.get() / _2; - let sc = half_theta.sin() * half_theta.cos(); - let sq = half_theta.sin() * half_theta.sin(); - - TypedMatrix4D::row_major( - _1 - _2 * (yy + zz) * sq, - _2 * (x * y * sq - z * sc), - _2 * (x * z * sq + y * sc), - _0, - - _2 * (x * y * sq + z * sc), - _1 - _2 * (xx + zz) * sq, - _2 * (y * z * sq - x * sc), - _0, - - _2 * (x * z * sq - y * sc), - _2 * (y * z * sq + x * sc), - _1 - _2 * (xx + yy) * sq, - _0, - - _0, - _0, - _0, - _1 - ) - } - - /// Returns a matrix with a rotation applied after self's transformation. - pub fn post_rotated(&self, x: T, y: T, z: T, theta: Radians) -> TypedMatrix4D { - self.post_mul(&TypedMatrix4D::create_rotation(x, y, z, theta)) - } - - /// Returns a matrix with a rotation applied before self's transformation. - pub fn pre_rotated(&self, x: T, y: T, z: T, theta: Radians) -> TypedMatrix4D { - self.pre_mul(&TypedMatrix4D::create_rotation(x, y, z, theta)) - } - - /// Create a 2d skew matrix. - /// - /// See https://drafts.csswg.org/css-transforms/#funcdef-skew - pub fn create_skew(alpha: Radians, beta: Radians) -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - let (sx, sy) = (beta.get().tan(), alpha.get().tan()); - TypedMatrix4D::row_major( - _1, sx, _0, _0, - sy, _1, _0, _0, - _0, _0, _1, _0, - _0, _0, _0, _1 - ) - } - - /// Create a simple perspective projection matrix - pub fn create_perspective(d: T) -> TypedMatrix4D { - let (_0, _1): (T, T) = (Zero::zero(), One::one()); - TypedMatrix4D::row_major( - _1, _0, _0, _0, - _0, _1, _0, _0, - _0, _0, _1, -_1 / d, - _0, _0, _0, _1 - ) - } -} - -impl TypedMatrix4D { - /// Returns an array containing this matrix's terms in row-major order (the order - /// in which the matrix is actually laid out in memory). - pub fn to_row_major_array(&self) -> [T; 16] { - [ - self.m11, self.m12, self.m13, self.m14, - self.m21, self.m22, self.m23, self.m24, - self.m31, self.m32, self.m33, self.m34, - self.m41, self.m42, self.m43, self.m44 - ] - } - - /// Returns an array containing this matrix's terms in column-major order. - pub fn to_column_major_array(&self) -> [T; 16] { - [ - self.m11, self.m21, self.m31, self.m41, - self.m12, self.m22, self.m32, self.m42, - self.m13, self.m23, self.m33, self.m43, - self.m14, self.m24, self.m34, self.m44 - ] - } - - /// Returns an array containing this matrix's 4 rows in (in row-major order) - /// as arrays. - /// - /// This is a convenience method to interface with other libraries like glium. - pub fn to_row_arrays(&self) -> [[T; 4];4] { - [ - [self.m11, self.m12, self.m13, self.m14], - [self.m21, self.m22, self.m23, self.m24], - [self.m31, self.m32, self.m33, self.m34], - [self.m41, self.m42, self.m43, self.m44] - ] - } - - /// Returns an array containing this matrix's 4 columns in (in row-major order, - /// or 4 rows in column-major order) as arrays. - /// - /// This is a convenience method to interface with other libraries like glium. - pub fn to_column_arrays(&self) -> [[T; 4]; 4] { - [ - [self.m11, self.m21, self.m31, self.m41], - [self.m12, self.m22, self.m32, self.m42], - [self.m13, self.m23, self.m33, self.m43], - [self.m14, self.m24, self.m34, self.m44] - ] - } -} - -impl fmt::Debug for TypedMatrix4D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.to_row_major_array().fmt(f) - } -} - -#[cfg(test)] -mod tests { - use approxeq::ApproxEq; - use matrix2d::Matrix2D; - use point::{Point2D, Point3D, Point4D}; - use Radians; - use super::*; - - use std::f32::consts::FRAC_PI_2; - - type Mf32 = Matrix4D; - - // For convenience. - fn rad(v: f32) -> Radians { Radians::new(v) } - - #[test] - pub fn test_translation() { - let t1 = Mf32::create_translation(1.0, 2.0, 3.0); - let t2 = Mf32::identity().pre_translated(1.0, 2.0, 3.0); - let t3 = Mf32::identity().post_translated(1.0, 2.0, 3.0); - assert_eq!(t1, t2); - assert_eq!(t1, t3); - - assert_eq!(t1.transform_point3d(&Point3D::new(1.0, 1.0, 1.0)), Point3D::new(2.0, 3.0, 4.0)); - assert_eq!(t1.transform_point(&Point2D::new(1.0, 1.0)), Point2D::new(2.0, 3.0)); - - assert_eq!(t1.post_mul(&t1), Mf32::create_translation(2.0, 4.0, 6.0)); - - assert!(!t1.is_2d()); - assert_eq!(Mf32::create_translation(1.0, 2.0, 3.0).to_2d(), Matrix2D::create_translation(1.0, 2.0)); - } - - #[test] - pub fn test_rotation() { - let r1 = Mf32::create_rotation(0.0, 0.0, 1.0, rad(FRAC_PI_2)); - let r2 = Mf32::identity().pre_rotated(0.0, 0.0, 1.0, rad(FRAC_PI_2)); - let r3 = Mf32::identity().post_rotated(0.0, 0.0, 1.0, rad(FRAC_PI_2)); - assert_eq!(r1, r2); - assert_eq!(r1, r3); - - assert!(r1.transform_point3d(&Point3D::new(1.0, 2.0, 3.0)).approx_eq(&Point3D::new(2.0, -1.0, 3.0))); - assert!(r1.transform_point(&Point2D::new(1.0, 2.0)).approx_eq(&Point2D::new(2.0, -1.0))); - - assert!(r1.post_mul(&r1).approx_eq(&Mf32::create_rotation(0.0, 0.0, 1.0, rad(FRAC_PI_2*2.0)))); - - assert!(r1.is_2d()); - assert!(r1.to_2d().approx_eq(&Matrix2D::create_rotation(rad(FRAC_PI_2)))); - } - - #[test] - pub fn test_scale() { - let s1 = Mf32::create_scale(2.0, 3.0, 4.0); - let s2 = Mf32::identity().pre_scaled(2.0, 3.0, 4.0); - let s3 = Mf32::identity().post_scaled(2.0, 3.0, 4.0); - assert_eq!(s1, s2); - assert_eq!(s1, s3); - - assert!(s1.transform_point3d(&Point3D::new(2.0, 2.0, 2.0)).approx_eq(&Point3D::new(4.0, 6.0, 8.0))); - assert!(s1.transform_point(&Point2D::new(2.0, 2.0)).approx_eq(&Point2D::new(4.0, 6.0))); - - assert_eq!(s1.post_mul(&s1), Mf32::create_scale(4.0, 9.0, 16.0)); - - assert!(!s1.is_2d()); - assert_eq!(Mf32::create_scale(2.0, 3.0, 0.0).to_2d(), Matrix2D::create_scale(2.0, 3.0)); - } - - #[test] - pub fn test_ortho() { - let (left, right, bottom, top) = (0.0f32, 1.0f32, 0.1f32, 1.0f32); - let (near, far) = (-1.0f32, 1.0f32); - let result = Mf32::ortho(left, right, bottom, top, near, far); - let expected = Mf32::row_major( - 2.0, 0.0, 0.0, 0.0, - 0.0, 2.22222222, 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - -1.0, -1.22222222, -0.0, 1.0 - ); - debug!("result={:?} expected={:?}", result, expected); - assert!(result.approx_eq(&expected)); - } - - #[test] - pub fn test_is_2d() { - assert!(Mf32::identity().is_2d()); - assert!(Mf32::create_rotation(0.0, 0.0, 1.0, rad(0.7854)).is_2d()); - assert!(!Mf32::create_rotation(0.0, 1.0, 0.0, rad(0.7854)).is_2d()); - } - - #[test] - pub fn test_row_major_2d() { - let m1 = Mf32::row_major_2d(1.0, 2.0, 3.0, 4.0, 5.0, 6.0); - let m2 = Mf32::row_major( - 1.0, 2.0, 0.0, 0.0, - 3.0, 4.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 5.0, 6.0, 0.0, 1.0 - ); - assert_eq!(m1, m2); - } - - #[test] - fn test_column_major() { - assert_eq!( - Mf32::row_major( - 1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, - 13.0, 14.0, 15.0, 16.0, - ), - Mf32::column_major( - 1.0, 5.0, 9.0, 13.0, - 2.0, 6.0, 10.0, 14.0, - 3.0, 7.0, 11.0, 15.0, - 4.0, 8.0, 12.0, 16.0, - ) - ); - } - - #[test] - pub fn test_inverse_simple() { - let m1 = Mf32::identity(); - let m2 = m1.inverse().unwrap(); - assert!(m1.approx_eq(&m2)); - } - - #[test] - pub fn test_inverse_scale() { - let m1 = Mf32::create_scale(1.5, 0.3, 2.1); - let m2 = m1.inverse().unwrap(); - assert!(m1.pre_mul(&m2).approx_eq(&Mf32::identity())); - } - - #[test] - pub fn test_inverse_translate() { - let m1 = Mf32::create_translation(-132.0, 0.3, 493.0); - let m2 = m1.inverse().unwrap(); - assert!(m1.pre_mul(&m2).approx_eq(&Mf32::identity())); - } - - #[test] - pub fn test_inverse_rotate() { - let m1 = Mf32::create_rotation(0.0, 1.0, 0.0, rad(1.57)); - let m2 = m1.inverse().unwrap(); - assert!(m1.pre_mul(&m2).approx_eq(&Mf32::identity())); - } - - #[test] - pub fn test_inverse_transform_point_2d() { - let m1 = Mf32::create_translation(100.0, 200.0, 0.0); - let m2 = m1.inverse().unwrap(); - assert!(m1.pre_mul(&m2).approx_eq(&Mf32::identity())); - - let p1 = Point2D::new(1000.0, 2000.0); - let p2 = m1.transform_point(&p1); - assert!(p2.eq(&Point2D::new(1100.0, 2200.0))); - - let p3 = m2.transform_point(&p2); - assert!(p3.eq(&p1)); - } - - #[test] - fn test_inverse_none() { - assert!(Mf32::create_scale(2.0, 0.0, 2.0).inverse().is_none()); - assert!(Mf32::create_scale(2.0, 2.0, 2.0).inverse().is_some()); - } - - #[test] - pub fn test_pre_post() { - let m1 = Matrix4D::identity().post_scaled(1.0, 2.0, 3.0).post_translated(1.0, 2.0, 3.0); - let m2 = Matrix4D::identity().pre_translated(1.0, 2.0, 3.0).pre_scaled(1.0, 2.0, 3.0); - assert!(m1.approx_eq(&m2)); - - let r = Mf32::create_rotation(0.0, 0.0, 1.0, rad(FRAC_PI_2)); - let t = Mf32::create_translation(2.0, 3.0, 0.0); - - let a = Point3D::new(1.0, 1.0, 1.0); - - assert!(r.post_mul(&t).transform_point3d(&a).approx_eq(&Point3D::new(3.0, 2.0, 1.0))); - assert!(t.post_mul(&r).transform_point3d(&a).approx_eq(&Point3D::new(4.0, -3.0, 1.0))); - assert!(t.post_mul(&r).transform_point3d(&a).approx_eq(&r.transform_point3d(&t.transform_point3d(&a)))); - - assert!(r.pre_mul(&t).transform_point3d(&a).approx_eq(&Point3D::new(4.0, -3.0, 1.0))); - assert!(t.pre_mul(&r).transform_point3d(&a).approx_eq(&Point3D::new(3.0, 2.0, 1.0))); - assert!(t.pre_mul(&r).transform_point3d(&a).approx_eq(&t.transform_point3d(&r.transform_point3d(&a)))); - } - - #[test] - fn test_size_of() { - use std::mem::size_of; - assert_eq!(size_of::>(), 16*size_of::()); - assert_eq!(size_of::>(), 16*size_of::()); - } - - #[test] - pub fn test_transform_associativity() { - let m1 = Mf32::row_major(3.0, 2.0, 1.5, 1.0, - 0.0, 4.5, -1.0, -4.0, - 0.0, 3.5, 2.5, 40.0, - 0.0, 3.0, 0.0, 1.0); - let m2 = Mf32::row_major(1.0, -1.0, 3.0, 0.0, - -1.0, 0.5, 0.0, 2.0, - 1.5, -2.0, 6.0, 0.0, - -2.5, 6.0, 1.0, 1.0); - - let p = Point4D::new(1.0, 3.0, 5.0, 1.0); - let p1 = m2.pre_mul(&m1).transform_point4d(&p); - let p2 = m2.transform_point4d(&m1.transform_point4d(&p)); - assert!(p1.approx_eq(&p2)); - } -} diff --git a/third_party/rust/euclid-0.10.5/src/num.rs b/third_party/rust/euclid-0.10.5/src/num.rs deleted file mode 100644 index b612624273ed..000000000000 --- a/third_party/rust/euclid-0.10.5/src/num.rs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2014 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. -//! A one-dimensional length, tagged with its units. - -use num_traits; - - -pub trait Zero { - fn zero() -> Self; -} - -impl Zero for T { - fn zero() -> T { num_traits::Zero::zero() } -} - -pub trait One { - fn one() -> Self; -} - -impl One for T { - fn one() -> T { num_traits::One::one() } -} - -pub trait Round : Copy { fn round(self) -> Self; } -pub trait Floor : Copy { fn floor(self) -> Self; } -pub trait Ceil : Copy { fn ceil(self) -> Self; } - -impl Round for f32 { fn round(self) -> Self { self.round() } } -impl Round for f64 { fn round(self) -> Self { self.round() } } -impl Round for i16 { fn round(self) -> Self { self } } -impl Round for u16 { fn round(self) -> Self { self } } -impl Round for i32 { fn round(self) -> Self { self } } -impl Round for i64 { fn round(self) -> Self { self } } -impl Round for u32 { fn round(self) -> Self { self } } -impl Round for u64 { fn round(self) -> Self { self } } -impl Round for usize { fn round(self) -> Self { self } } -impl Round for isize { fn round(self) -> Self { self } } - -impl Floor for f32 { fn floor(self) -> Self { self.floor() } } -impl Floor for f64 { fn floor(self) -> Self { self.floor() } } -impl Floor for i16 { fn floor(self) -> Self { self } } -impl Floor for u16 { fn floor(self) -> Self { self } } -impl Floor for i32 { fn floor(self) -> Self { self } } -impl Floor for i64 { fn floor(self) -> Self { self } } -impl Floor for u32 { fn floor(self) -> Self { self } } -impl Floor for u64 { fn floor(self) -> Self { self } } -impl Floor for usize { fn floor(self) -> Self { self } } -impl Floor for isize { fn floor(self) -> Self { self } } - -impl Ceil for f32 { fn ceil(self) -> Self { self.ceil() } } -impl Ceil for f64 { fn ceil(self) -> Self { self.ceil() } } -impl Ceil for i16 { fn ceil(self) -> Self { self } } -impl Ceil for u16 { fn ceil(self) -> Self { self } } -impl Ceil for i32 { fn ceil(self) -> Self { self } } -impl Ceil for i64 { fn ceil(self) -> Self { self } } -impl Ceil for u32 { fn ceil(self) -> Self { self } } -impl Ceil for u64 { fn ceil(self) -> Self { self } } -impl Ceil for usize { fn ceil(self) -> Self { self } } -impl Ceil for isize { fn ceil(self) -> Self { self } } - diff --git a/third_party/rust/euclid-0.10.5/src/point.rs b/third_party/rust/euclid-0.10.5/src/point.rs deleted file mode 100644 index 85babca436aa..000000000000 --- a/third_party/rust/euclid-0.10.5/src/point.rs +++ /dev/null @@ -1,939 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use super::UnknownUnit; -use approxeq::ApproxEq; -use length::Length; -use scale_factor::ScaleFactor; -use size::TypedSize2D; -use num::*; -use num_traits::{Float, NumCast}; -use std::fmt; -use std::ops::{Add, Neg, Mul, Sub, Div}; -use std::marker::PhantomData; - -define_matrix! { - /// A 2d Point tagged with a unit. - #[derive(RustcDecodable, RustcEncodable)] - pub struct TypedPoint2D { - pub x: T, - pub y: T, - } -} - -/// Default 2d point type with no unit. -/// -/// `Point2D` provides the same methods as `TypedPoint2D`. -pub type Point2D = TypedPoint2D; - -impl TypedPoint2D { - /// Constructor, setting all components to zero. - #[inline] - pub fn zero() -> TypedPoint2D { - TypedPoint2D::new(Zero::zero(), Zero::zero()) - } - - /// Convert into a 3d point. - #[inline] - pub fn to_3d(&self) -> TypedPoint3D { - TypedPoint3D::new(self.x, self.y, Zero::zero()) - } -} - -impl fmt::Debug for TypedPoint2D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "({:?},{:?})", self.x, self.y) - } -} - -impl fmt::Display for TypedPoint2D { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - write!(formatter, "({},{})", self.x, self.y) - } -} - -impl TypedPoint2D { - /// Constructor taking scalar values directly. - #[inline] - pub fn new(x: T, y: T) -> TypedPoint2D { - TypedPoint2D { x: x, y: y, _unit: PhantomData } - } - - /// Constructor taking properly typed Lengths instead of scalar values. - #[inline] - pub fn from_lengths(x: Length, y: Length) -> TypedPoint2D { - TypedPoint2D::new(x.0, y.0) - } - - /// Returns self.x as a Length carrying the unit. - #[inline] - pub fn x_typed(&self) -> Length { Length::new(self.x) } - - /// Returns self.y as a Length carrying the unit. - #[inline] - pub fn y_typed(&self) -> Length { Length::new(self.y) } - - /// Drop the units, preserving only the numeric value. - #[inline] - pub fn to_untyped(&self) -> Point2D { - TypedPoint2D::new(self.x, self.y) - } - - /// Tag a unitless value with units. - #[inline] - pub fn from_untyped(p: &Point2D) -> TypedPoint2D { - TypedPoint2D::new(p.x, p.y) - } - - #[inline] - pub fn to_array(&self) -> [T; 2] { - [self.x, self.y] - } -} - -impl TypedPoint2D -where T: Copy + Mul + Add + Sub { - /// Dot product. - #[inline] - pub fn dot(self, other: TypedPoint2D) -> T { - self.x * other.x + self.y * other.y - } - - /// Returns the norm of the cross product [self.x, self.y, 0] x [other.x, other.y, 0].. - #[inline] - pub fn cross(self, other: TypedPoint2D) -> T { - self.x * other.y - self.y * other.x - } -} - -impl, U> Add for TypedPoint2D { - type Output = TypedPoint2D; - fn add(self, other: TypedPoint2D) -> TypedPoint2D { - TypedPoint2D::new(self.x + other.x, self.y + other.y) - } -} - -impl, U> Add> for TypedPoint2D { - type Output = TypedPoint2D; - fn add(self, other: TypedSize2D) -> TypedPoint2D { - TypedPoint2D::new(self.x + other.width, self.y + other.height) - } -} - -impl, U> TypedPoint2D { - pub fn add_size(&self, other: &TypedSize2D) -> TypedPoint2D { - TypedPoint2D::new(self.x + other.width, self.y + other.height) - } -} - -impl, U> Sub for TypedPoint2D { - type Output = TypedPoint2D; - fn sub(self, other: TypedPoint2D) -> TypedPoint2D { - TypedPoint2D::new(self.x - other.x, self.y - other.y) - } -} - -impl , U> Neg for TypedPoint2D { - type Output = TypedPoint2D; - #[inline] - fn neg(self) -> TypedPoint2D { - TypedPoint2D::new(-self.x, -self.y) - } -} - -impl TypedPoint2D { - pub fn min(self, other: TypedPoint2D) -> TypedPoint2D { - TypedPoint2D::new(self.x.min(other.x), self.y.min(other.y)) - } - - pub fn max(self, other: TypedPoint2D) -> TypedPoint2D { - TypedPoint2D::new(self.x.max(other.x), self.y.max(other.y)) - } -} - -impl, U> Mul for TypedPoint2D { - type Output = TypedPoint2D; - #[inline] - fn mul(self, scale: T) -> TypedPoint2D { - TypedPoint2D::new(self.x * scale, self.y * scale) - } -} - -impl, U> Div for TypedPoint2D { - type Output = TypedPoint2D; - #[inline] - fn div(self, scale: T) -> TypedPoint2D { - TypedPoint2D::new(self.x / scale, self.y / scale) - } -} - -impl, U1, U2> Mul> for TypedPoint2D { - type Output = TypedPoint2D; - #[inline] - fn mul(self, scale: ScaleFactor) -> TypedPoint2D { - TypedPoint2D::new(self.x * scale.get(), self.y * scale.get()) - } -} - -impl, U1, U2> Div> for TypedPoint2D { - type Output = TypedPoint2D; - #[inline] - fn div(self, scale: ScaleFactor) -> TypedPoint2D { - TypedPoint2D::new(self.x / scale.get(), self.y / scale.get()) - } -} - -impl TypedPoint2D { - /// Rounds each component to the nearest integer value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - /// For example { -0.1, -0.8 }.round() == { 0.0, -1.0 } - pub fn round(&self) -> Self { - TypedPoint2D::new(self.x.round(), self.y.round()) - } -} - -impl TypedPoint2D { - /// Rounds each component to the smallest integer equal or greater than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - /// For example { -0.1, -0.8 }.ceil() == { 0.0, 0.0 }. - pub fn ceil(&self) -> Self { - TypedPoint2D::new(self.x.ceil(), self.y.ceil()) - } -} - -impl TypedPoint2D { - /// Rounds each component to the biggest integer equal or lower than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - /// For example { -0.1, -0.8 }.floor() == { -1.0, -1.0 }. - pub fn floor(&self) -> Self { - TypedPoint2D::new(self.x.floor(), self.y.floor()) - } -} - -impl TypedPoint2D { - /// Cast from one numeric representation to another, preserving the units. - /// - /// When casting from floating point to integer coordinates, the decimals are truncated - /// as one would expect from a simple cast, but this behavior does not always make sense - /// geometrically. Consider using round(), ceil or floor() before casting. - pub fn cast(&self) -> Option> { - match (NumCast::from(self.x), NumCast::from(self.y)) { - (Some(x), Some(y)) => Some(TypedPoint2D::new(x, y)), - _ => None - } - } - - // Convenience functions for common casts - - /// Cast into an f32 vector. - pub fn to_f32(&self) -> TypedPoint2D { - self.cast().unwrap() - } - - /// Cast into an usize point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_uint(&self) -> TypedPoint2D { - self.cast().unwrap() - } - - /// Cast into an i32 point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i32(&self) -> TypedPoint2D { - self.cast().unwrap() - } - - /// Cast into an i64 point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i64(&self) -> TypedPoint2D { - self.cast().unwrap() - } -} - -impl, U> ApproxEq> for TypedPoint2D { - #[inline] - fn approx_epsilon() -> Self { - TypedPoint2D::new(T::approx_epsilon(), T::approx_epsilon()) - } - - #[inline] - fn approx_eq(&self, other: &Self) -> bool { - self.x.approx_eq(&other.x) && self.y.approx_eq(&other.y) - } - - #[inline] - fn approx_eq_eps(&self, other: &Self, eps: &Self) -> bool { - self.x.approx_eq_eps(&other.x, &eps.x) && self.y.approx_eq_eps(&other.y, &eps.y) - } -} - -define_matrix! { - /// A 3d Point tagged with a unit. - #[derive(RustcDecodable, RustcEncodable)] - pub struct TypedPoint3D { - pub x: T, - pub y: T, - pub z: T, - } -} - -/// Default 3d point type with no unit. -/// -/// `Point3D` provides the same methods as `TypedPoint3D`. -pub type Point3D = TypedPoint3D; - -impl TypedPoint3D { - /// Constructor, setting all copmonents to zero. - #[inline] - pub fn zero() -> TypedPoint3D { - TypedPoint3D::new(Zero::zero(), Zero::zero(), Zero::zero()) - } -} - -impl fmt::Debug for TypedPoint3D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "({:?},{:?},{:?})", self.x, self.y, self.z) - } -} - -impl fmt::Display for TypedPoint3D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "({},{},{})", self.x, self.y, self.z) - } -} - -impl TypedPoint3D { - /// Constructor taking scalar values directly. - #[inline] - pub fn new(x: T, y: T, z: T) -> TypedPoint3D { - TypedPoint3D { x: x, y: y, z: z, _unit: PhantomData } - } - - /// Constructor taking properly typed Lengths instead of scalar values. - #[inline] - pub fn from_lengths(x: Length, y: Length, z: Length) -> TypedPoint3D { - TypedPoint3D::new(x.0, y.0, z.0) - } - - /// Returns self.x as a Length carrying the unit. - #[inline] - pub fn x_typed(&self) -> Length { Length::new(self.x) } - - /// Returns self.y as a Length carrying the unit. - #[inline] - pub fn y_typed(&self) -> Length { Length::new(self.y) } - - /// Returns self.z as a Length carrying the unit. - #[inline] - pub fn z_typed(&self) -> Length { Length::new(self.z) } - - #[inline] - pub fn to_array(&self) -> [T; 3] { [self.x, self.y, self.z] } - - /// Drop the units, preserving only the numeric value. - #[inline] - pub fn to_untyped(&self) -> Point3D { - TypedPoint3D::new(self.x, self.y, self.z) - } - - /// Tag a unitless value with units. - #[inline] - pub fn from_untyped(p: &Point3D) -> TypedPoint3D { - TypedPoint3D::new(p.x, p.y, p.z) - } - - /// Convert into a 2d point. - #[inline] - pub fn to_2d(&self) -> TypedPoint2D { - TypedPoint2D::new(self.x, self.y) - } -} - -impl + - Add + - Sub + - Copy, U> TypedPoint3D { - - // Dot product. - #[inline] - pub fn dot(self, other: TypedPoint3D) -> T { - self.x * other.x + - self.y * other.y + - self.z * other.z - } - - // Cross product. - #[inline] - pub fn cross(self, other: TypedPoint3D) -> TypedPoint3D { - TypedPoint3D::new(self.y * other.z - self.z * other.y, - self.z * other.x - self.x * other.z, - self.x * other.y - self.y * other.x) - } -} - -impl, U> Add for TypedPoint3D { - type Output = TypedPoint3D; - fn add(self, other: TypedPoint3D) -> TypedPoint3D { - TypedPoint3D::new(self.x + other.x, - self.y + other.y, - self.z + other.z) - } -} - -impl, U> Sub for TypedPoint3D { - type Output = TypedPoint3D; - fn sub(self, other: TypedPoint3D) -> TypedPoint3D { - TypedPoint3D::new(self.x - other.x, - self.y - other.y, - self.z - other.z) - } -} - -impl , U> Neg for TypedPoint3D { - type Output = TypedPoint3D; - #[inline] - fn neg(self) -> TypedPoint3D { - TypedPoint3D::new(-self.x, -self.y, -self.z) - } -} - -impl TypedPoint3D { - pub fn min(self, other: TypedPoint3D) -> TypedPoint3D { - TypedPoint3D::new(self.x.min(other.x), - self.y.min(other.y), - self.z.min(other.z)) - } - - pub fn max(self, other: TypedPoint3D) -> TypedPoint3D { - TypedPoint3D::new(self.x.max(other.x), self.y.max(other.y), - self.z.max(other.z)) - } -} - -impl TypedPoint3D { - /// Rounds each component to the nearest integer value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn round(&self) -> Self { - TypedPoint3D::new(self.x.round(), self.y.round(), self.z.round()) - } -} - -impl TypedPoint3D { - /// Rounds each component to the smallest integer equal or greater than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn ceil(&self) -> Self { - TypedPoint3D::new(self.x.ceil(), self.y.ceil(), self.z.ceil()) - } -} - -impl TypedPoint3D { - /// Rounds each component to the biggest integer equal or lower than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn floor(&self) -> Self { - TypedPoint3D::new(self.x.floor(), self.y.floor(), self.z.floor()) - } -} - -impl TypedPoint3D { - /// Cast from one numeric representation to another, preserving the units. - /// - /// When casting from floating point to integer coordinates, the decimals are truncated - /// as one would expect from a simple cast, but this behavior does not always make sense - /// geometrically. Consider using round(), ceil or floor() before casting. - pub fn cast(&self) -> Option> { - match (NumCast::from(self.x), - NumCast::from(self.y), - NumCast::from(self.z)) { - (Some(x), Some(y), Some(z)) => Some(TypedPoint3D::new(x, y, z)), - _ => None - } - } - - // Convenience functions for common casts - - /// Cast into an f32 vector. - pub fn to_f32(&self) -> TypedPoint3D { - self.cast().unwrap() - } - - /// Cast into an usize point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_uint(&self) -> TypedPoint3D { - self.cast().unwrap() - } - - /// Cast into an i32 point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i32(&self) -> TypedPoint3D { - self.cast().unwrap() - } - - /// Cast into an i64 point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i64(&self) -> TypedPoint3D { - self.cast().unwrap() - } -} - -impl, U> ApproxEq> for TypedPoint3D { - #[inline] - fn approx_epsilon() -> Self { - TypedPoint3D::new(T::approx_epsilon(), T::approx_epsilon(), T::approx_epsilon()) - } - - #[inline] - fn approx_eq(&self, other: &Self) -> bool { - self.x.approx_eq(&other.x) - && self.y.approx_eq(&other.y) - && self.z.approx_eq(&other.z) - } - - #[inline] - fn approx_eq_eps(&self, other: &Self, eps: &Self) -> bool { - self.x.approx_eq_eps(&other.x, &eps.x) - && self.y.approx_eq_eps(&other.y, &eps.y) - && self.z.approx_eq_eps(&other.z, &eps.z) - } -} - -define_matrix! { - /// A 4d Point tagged with a unit. - #[derive(RustcDecodable, RustcEncodable)] - pub struct TypedPoint4D { - pub x: T, - pub y: T, - pub z: T, - pub w: T, - } -} - -/// Default 4d point with no unit. -/// -/// `Point4D` provides the same methods as `TypedPoint4D`. -pub type Point4D = TypedPoint4D; - -impl TypedPoint4D { - /// Constructor, setting all copmonents to zero. - #[inline] - pub fn zero() -> TypedPoint4D { - TypedPoint4D::new(Zero::zero(), Zero::zero(), Zero::zero(), Zero::zero()) - } -} - -impl fmt::Debug for TypedPoint4D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "({:?},{:?},{:?},{:?})", self.x, self.y, self.z, self.w) - } -} - -impl fmt::Display for TypedPoint4D { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - write!(formatter, "({},{},{},{})", self.x, self.y, self.z, self.w) - } -} - -impl TypedPoint4D { - /// Constructor taking scalar values directly. - #[inline] - pub fn new(x: T, y: T, z: T, w: T) -> TypedPoint4D { - TypedPoint4D { x: x, y: y, z: z, w: w, _unit: PhantomData } - } - - /// Constructor taking properly typed Lengths instead of scalar values. - #[inline] - pub fn from_lengths(x: Length, - y: Length, - z: Length, - w: Length) -> TypedPoint4D { - TypedPoint4D::new(x.0, y.0, z.0, w.0) - } - - /// Returns self.x as a Length carrying the unit. - #[inline] - pub fn x_typed(&self) -> Length { Length::new(self.x) } - - /// Returns self.y as a Length carrying the unit. - #[inline] - pub fn y_typed(&self) -> Length { Length::new(self.y) } - - /// Returns self.z as a Length carrying the unit. - #[inline] - pub fn z_typed(&self) -> Length { Length::new(self.z) } - - /// Returns self.w as a Length carrying the unit. - #[inline] - pub fn w_typed(&self) -> Length { Length::new(self.w) } - - /// Drop the units, preserving only the numeric value. - #[inline] - pub fn to_untyped(&self) -> Point4D { - TypedPoint4D::new(self.x, self.y, self.z, self.w) - } - - /// Tag a unitless value with units. - #[inline] - pub fn from_untyped(p: &Point4D) -> TypedPoint4D { - TypedPoint4D::new(p.x, p.y, p.z, p.w) - } - - #[inline] - pub fn to_array(&self) -> [T; 4] { - [self.x, self.y, self.z, self.w] - } -} - -impl, U> TypedPoint4D { - /// Convert into a 2d point. - #[inline] - pub fn to_2d(self) -> TypedPoint2D { - TypedPoint2D::new(self.x / self.w, self.y / self.w) - } - - /// Convert into a 3d point. - #[inline] - pub fn to_3d(self) -> TypedPoint3D { - TypedPoint3D::new(self.x / self.w, self.y / self.w, self.z / self.w) - } -} - -impl, U> Add for TypedPoint4D { - type Output = TypedPoint4D; - fn add(self, other: TypedPoint4D) -> TypedPoint4D { - TypedPoint4D::new(self.x + other.x, - self.y + other.y, - self.z + other.z, - self.w + other.w) - } -} - -impl, U> Sub for TypedPoint4D { - type Output = TypedPoint4D; - fn sub(self, other: TypedPoint4D) -> TypedPoint4D { - TypedPoint4D::new(self.x - other.x, - self.y - other.y, - self.z - other.z, - self.w - other.w) - } -} - -impl , U> Neg for TypedPoint4D { - type Output = TypedPoint4D; - #[inline] - fn neg(self) -> TypedPoint4D { - TypedPoint4D::new(-self.x, -self.y, -self.z, -self.w) - } -} - -impl TypedPoint4D { - pub fn min(self, other: TypedPoint4D) -> TypedPoint4D { - TypedPoint4D::new(self.x.min(other.x), self.y.min(other.y), - self.z.min(other.z), self.w.min(other.w)) - } - - pub fn max(self, other: TypedPoint4D) -> TypedPoint4D { - TypedPoint4D::new(self.x.max(other.x), self.y.max(other.y), - self.z.max(other.z), self.w.max(other.w)) - } -} - -impl TypedPoint4D { - /// Rounds each component to the nearest integer value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn round(&self) -> Self { - TypedPoint4D::new(self.x.round(), self.y.round(), self.z.round(), self.w.round()) - } -} - -impl TypedPoint4D { - /// Rounds each component to the smallest integer equal or greater than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn ceil(&self) -> Self { - TypedPoint4D::new(self.x.ceil(), self.y.ceil(), self.z.ceil(), self.w.ceil()) - } -} - -impl TypedPoint4D { - /// Rounds each component to the biggest integer equal or lower than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn floor(&self) -> Self { - TypedPoint4D::new(self.x.floor(), self.y.floor(), self.z.floor(), self.w.floor()) - } -} - -impl TypedPoint4D { - /// Cast from one numeric representation to another, preserving the units. - /// - /// When casting from floating point to integer coordinates, the decimals are truncated - /// as one would expect from a simple cast, but this behavior does not always make sense - /// geometrically. Consider using round(), ceil or floor() before casting. - pub fn cast(&self) -> Option> { - match (NumCast::from(self.x), - NumCast::from(self.y), - NumCast::from(self.z), - NumCast::from(self.w)) { - (Some(x), Some(y), Some(z), Some(w)) => Some(TypedPoint4D::new(x, y, z, w)), - _ => None - } - } - - // Convenience functions for common casts - - /// Cast into an f32 vector. - pub fn to_f32(&self) -> TypedPoint4D { - self.cast().unwrap() - } - - /// Cast into an usize point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_uint(&self) -> TypedPoint4D { - self.cast().unwrap() - } - - /// Cast into an i32 point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i32(&self) -> TypedPoint4D { - self.cast().unwrap() - } - - /// Cast into an i64 point, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i64(&self) -> TypedPoint4D { - self.cast().unwrap() - } -} - -impl, U> ApproxEq for TypedPoint4D { - fn approx_epsilon() -> T { - T::approx_epsilon() - } - - fn approx_eq_eps(&self, other: &Self, approx_epsilon: &T) -> bool { - self.x.approx_eq_eps(&other.x, approx_epsilon) - && self.y.approx_eq_eps(&other.y, approx_epsilon) - && self.z.approx_eq_eps(&other.z, approx_epsilon) - && self.w.approx_eq_eps(&other.w, approx_epsilon) - } - - fn approx_eq(&self, other: &Self) -> bool { - self.approx_eq_eps(&other, &Self::approx_epsilon()) - } -} - -pub fn point2(x: T, y: T) -> TypedPoint2D { - TypedPoint2D::new(x, y) -} - -pub fn point3(x: T, y: T, z: T) -> TypedPoint3D { - TypedPoint3D::new(x, y, z) -} - -pub fn point4(x: T, y: T, z: T, w: T) -> TypedPoint4D { - TypedPoint4D::new(x, y, z, w) -} - -#[cfg(test)] -mod point2d { - use super::Point2D; - - #[test] - pub fn test_scalar_mul() { - let p1: Point2D = Point2D::new(3.0, 5.0); - - let result = p1 * 5.0; - - assert_eq!(result, Point2D::new(15.0, 25.0)); - } - - #[test] - pub fn test_dot() { - let p1: Point2D = Point2D::new(2.0, 7.0); - let p2: Point2D = Point2D::new(13.0, 11.0); - assert_eq!(p1.dot(p2), 103.0); - } - - #[test] - pub fn test_cross() { - let p1: Point2D = Point2D::new(4.0, 7.0); - let p2: Point2D = Point2D::new(13.0, 8.0); - let r = p1.cross(p2); - assert_eq!(r, -59.0); - } - - #[test] - pub fn test_min() { - let p1 = Point2D::new(1.0, 3.0); - let p2 = Point2D::new(2.0, 2.0); - - let result = p1.min(p2); - - assert_eq!(result, Point2D::new(1.0, 2.0)); - } - - #[test] - pub fn test_max() { - let p1 = Point2D::new(1.0, 3.0); - let p2 = Point2D::new(2.0, 2.0); - - let result = p1.max(p2); - - assert_eq!(result, Point2D::new(2.0, 3.0)); - } -} - -#[cfg(test)] -mod typedpoint2d { - use super::TypedPoint2D; - use scale_factor::ScaleFactor; - - pub enum Mm {} - pub enum Cm {} - - pub type Point2DMm = TypedPoint2D; - pub type Point2DCm = TypedPoint2D; - - #[test] - pub fn test_add() { - let p1 = Point2DMm::new(1.0, 2.0); - let p2 = Point2DMm::new(3.0, 4.0); - - let result = p1 + p2; - - assert_eq!(result, Point2DMm::new(4.0, 6.0)); - } - - #[test] - pub fn test_scalar_mul() { - let p1 = Point2DMm::new(1.0, 2.0); - let cm_per_mm: ScaleFactor = ScaleFactor::new(0.1); - - let result = p1 * cm_per_mm; - - assert_eq!(result, Point2DCm::new(0.1, 0.2)); - } -} - -#[cfg(test)] -mod point3d { - use super::Point3D; - - #[test] - pub fn test_dot() { - let p1 = Point3D::new(7.0, 21.0, 32.0); - let p2 = Point3D::new(43.0, 5.0, 16.0); - assert_eq!(p1.dot(p2), 918.0); - } - - #[test] - pub fn test_cross() { - let p1 = Point3D::new(4.0, 7.0, 9.0); - let p2 = Point3D::new(13.0, 8.0, 3.0); - let p3 = p1.cross(p2); - assert_eq!(p3, Point3D::new(-51.0, 105.0, -59.0)); - } - - #[test] - pub fn test_min() { - let p1 = Point3D::new(1.0, 3.0, 5.0); - let p2 = Point3D::new(2.0, 2.0, -1.0); - - let result = p1.min(p2); - - assert_eq!(result, Point3D::new(1.0, 2.0, -1.0)); - } - - #[test] - pub fn test_max() { - let p1 = Point3D::new(1.0, 3.0, 5.0); - let p2 = Point3D::new(2.0, 2.0, -1.0); - - let result = p1.max(p2); - - assert_eq!(result, Point3D::new(2.0, 3.0, 5.0)); - } -} - -#[cfg(test)] -mod point4d { - use super::Point4D; - - #[test] - pub fn test_add() { - let p1 = Point4D::new(7.0, 21.0, 32.0, 1.0); - let p2 = Point4D::new(43.0, 5.0, 16.0, 2.0); - - let result = p1 + p2; - - assert_eq!(result, Point4D::new(50.0, 26.0, 48.0, 3.0)); - } - - #[test] - pub fn test_sub() { - let p1 = Point4D::new(7.0, 21.0, 32.0, 1.0); - let p2 = Point4D::new(43.0, 5.0, 16.0, 2.0); - - let result = p1 - p2; - - assert_eq!(result, Point4D::new(-36.0, 16.0, 16.0, -1.0)); - } - - #[test] - pub fn test_min() { - let p1 = Point4D::new(1.0, 3.0, 5.0, 7.0); - let p2 = Point4D::new(2.0, 2.0, -1.0, 10.0); - - let result = p1.min(p2); - - assert_eq!(result, Point4D::new(1.0, 2.0, -1.0, 7.0)); - } - - #[test] - pub fn test_max() { - let p1 = Point4D::new(1.0, 3.0, 5.0, 7.0); - let p2 = Point4D::new(2.0, 2.0, -1.0, 10.0); - - let result = p1.max(p2); - - assert_eq!(result, Point4D::new(2.0, 3.0, 5.0, 10.0)); - } -} diff --git a/third_party/rust/euclid-0.10.5/src/rect.rs b/third_party/rust/euclid-0.10.5/src/rect.rs deleted file mode 100644 index fff6a1f90a07..000000000000 --- a/third_party/rust/euclid-0.10.5/src/rect.rs +++ /dev/null @@ -1,671 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use super::UnknownUnit; -use length::Length; -use scale_factor::ScaleFactor; -use num::*; -use point::TypedPoint2D; -use size::TypedSize2D; - -use heapsize::HeapSizeOf; -use num_traits::NumCast; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::cmp::PartialOrd; -use std::fmt; -use std::ops::{Add, Sub, Mul, Div}; - -/// A 2d Rectangle optionally tagged with a unit. -#[derive(RustcDecodable, RustcEncodable)] -pub struct TypedRect { - pub origin: TypedPoint2D, - pub size: TypedSize2D, -} - -/// The default rectangle type with no unit. -pub type Rect = TypedRect; - -impl HeapSizeOf for TypedRect { - fn heap_size_of_children(&self) -> usize { - self.origin.heap_size_of_children() + self.size.heap_size_of_children() - } -} - -impl Deserialize for TypedRect { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer - { - let (origin, size) = try!(Deserialize::deserialize(deserializer)); - Ok(TypedRect::new(origin, size)) - } -} - -impl Serialize for TypedRect { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer - { - (&self.origin, &self.size).serialize(serializer) - } -} - -impl Copy for TypedRect {} - -impl Clone for TypedRect { - fn clone(&self) -> TypedRect { *self } -} - -impl PartialEq> for TypedRect { - fn eq(&self, other: &TypedRect) -> bool { - self.origin.eq(&other.origin) && self.size.eq(&other.size) - } -} - -impl Eq for TypedRect {} - -impl fmt::Debug for TypedRect { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "TypedRect({:?} at {:?})", self.size, self.origin) - } -} - -impl fmt::Display for TypedRect { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - write!(formatter, "Rect({} at {})", self.size, self.origin) - } -} - -impl TypedRect { - /// Constructor. - pub fn new(origin: TypedPoint2D, size: TypedSize2D) -> TypedRect { - TypedRect { - origin: origin, - size: size, - } - } -} - -impl TypedRect -where T: Copy + Clone + Zero + PartialOrd + PartialEq + Add + Sub { - #[inline] - pub fn intersects(&self, other: &TypedRect) -> bool { - self.origin.x < other.origin.x + other.size.width && - other.origin.x < self.origin.x + self.size.width && - self.origin.y < other.origin.y + other.size.height && - other.origin.y < self.origin.y + self.size.height - } - - #[inline] - pub fn max_x(&self) -> T { - self.origin.x + self.size.width - } - - #[inline] - pub fn min_x(&self) -> T { - self.origin.x - } - - #[inline] - pub fn max_y(&self) -> T { - self.origin.y + self.size.height - } - - #[inline] - pub fn min_y(&self) -> T { - self.origin.y - } - - #[inline] - pub fn max_x_typed(&self) -> Length { - Length::new(self.max_x()) - } - - #[inline] - pub fn min_x_typed(&self) -> Length { - Length::new(self.min_x()) - } - - #[inline] - pub fn max_y_typed(&self) -> Length { - Length::new(self.max_y()) - } - - #[inline] - pub fn min_y_typed(&self) -> Length { - Length::new(self.min_y()) - } - - #[inline] - pub fn intersection(&self, other: &TypedRect) -> Option> { - if !self.intersects(other) { - return None; - } - - let upper_left = TypedPoint2D::new(max(self.min_x(), other.min_x()), - max(self.min_y(), other.min_y())); - let lower_right_x = min(self.max_x(), other.max_x()); - let lower_right_y = min(self.max_y(), other.max_y()); - - Some(TypedRect::new(upper_left, TypedSize2D::new(lower_right_x - upper_left.x, - lower_right_y - upper_left.y))) - } - - /// Translates the rect by a vector. - #[inline] - pub fn translate(&self, other: &TypedPoint2D) -> TypedRect { - TypedRect::new( - TypedPoint2D::new(self.origin.x + other.x, self.origin.y + other.y), - self.size - ) - } - - /// Returns true if this rectangle contains the point. Points are considered - /// in the rectangle if they are on the left or top edge, but outside if they - /// are on the right or bottom edge. - #[inline] - pub fn contains(&self, other: &TypedPoint2D) -> bool { - self.origin.x <= other.x && other.x < self.origin.x + self.size.width && - self.origin.y <= other.y && other.y < self.origin.y + self.size.height - } - - /// Returns true if this rectangle contains the interior of rect. Always - /// returns true if rect is empty, and always returns false if rect is - /// nonempty but this rectangle is empty. - #[inline] - pub fn contains_rect(&self, rect: &TypedRect) -> bool { - rect.is_empty() || - (self.min_x() <= rect.min_x() && rect.max_x() <= self.max_x() && - self.min_y() <= rect.min_y() && rect.max_y() <= self.max_y()) - } - - #[inline] - pub fn inflate(&self, width: T, height: T) -> TypedRect { - TypedRect::new( - TypedPoint2D::new(self.origin.x - width, self.origin.y - height), - TypedSize2D::new(self.size.width + width + width, self.size.height + height + height), - ) - } - - #[inline] - pub fn inflate_typed(&self, width: Length, height: Length) -> TypedRect { - self.inflate(width.get(), height.get()) - } - - #[inline] - pub fn top_right(&self) -> TypedPoint2D { - TypedPoint2D::new(self.max_x(), self.origin.y) - } - - #[inline] - pub fn bottom_left(&self) -> TypedPoint2D { - TypedPoint2D::new(self.origin.x, self.max_y()) - } - - #[inline] - pub fn bottom_right(&self) -> TypedPoint2D { - TypedPoint2D::new(self.max_x(), self.max_y()) - } - - #[inline] - pub fn translate_by_size(&self, size: &TypedSize2D) -> TypedRect { - self.translate(&TypedPoint2D::new(size.width, size.height)) - } - - /// Returns the smallest rectangle containing the four points. - pub fn from_points(points: &[TypedPoint2D]) -> Self { - if points.len() == 0 { - return TypedRect::zero(); - } - let (mut min_x, mut min_y) = (points[0].x, points[0].y); - let (mut max_x, mut max_y) = (min_x, min_y); - for point in &points[1..] { - if point.x < min_x { - min_x = point.x - } - if point.x > max_x { - max_x = point.x - } - if point.y < min_y { - min_y = point.y - } - if point.y > max_y { - max_y = point.y - } - } - TypedRect::new(TypedPoint2D::new(min_x, min_y), - TypedSize2D::new(max_x - min_x, max_y - min_y)) - } -} - -impl TypedRect -where T: Copy + Clone + PartialOrd + Add + Sub + Zero { - #[inline] - pub fn union(&self, other: &TypedRect) -> TypedRect { - if self.size == Zero::zero() { - return *other; - } - if other.size == Zero::zero() { - return *self; - } - - let upper_left = TypedPoint2D::new(min(self.min_x(), other.min_x()), - min(self.min_y(), other.min_y())); - - let lower_right_x = max(self.max_x(), other.max_x()); - let lower_right_y = max(self.max_y(), other.max_y()); - - TypedRect::new( - upper_left, - TypedSize2D::new(lower_right_x - upper_left.x, lower_right_y - upper_left.y) - ) - } -} - -impl TypedRect { - #[inline] - pub fn scale(&self, x: Scale, y: Scale) -> TypedRect - where T: Copy + Clone + Mul { - TypedRect::new( - TypedPoint2D::new(self.origin.x * x, self.origin.y * y), - TypedSize2D::new(self.size.width * x, self.size.height * y) - ) - } -} - -impl TypedRect { - /// Constructor, setting all sides to zero. - pub fn zero() -> TypedRect { - TypedRect::new( - TypedPoint2D::zero(), - TypedSize2D::zero(), - ) - } - - /// Returns true if the size is zero, regardless of the origin's value. - pub fn is_empty(&self) -> bool { - self.size.width == Zero::zero() || self.size.height == Zero::zero() - } -} - - -pub fn min(x: T, y: T) -> T { - if x <= y { x } else { y } -} - -pub fn max(x: T, y: T) -> T { - if x >= y { x } else { y } -} - -impl, U> Mul for TypedRect { - type Output = TypedRect; - #[inline] - fn mul(self, scale: T) -> TypedRect { - TypedRect::new(self.origin * scale, self.size * scale) - } -} - -impl, U> Div for TypedRect { - type Output = TypedRect; - #[inline] - fn div(self, scale: T) -> TypedRect { - TypedRect::new(self.origin / scale, self.size / scale) - } -} - -impl, U1, U2> Mul> for TypedRect { - type Output = TypedRect; - #[inline] - fn mul(self, scale: ScaleFactor) -> TypedRect { - TypedRect::new(self.origin * scale, self.size * scale) - } -} - -impl, U1, U2> Div> for TypedRect { - type Output = TypedRect; - #[inline] - fn div(self, scale: ScaleFactor) -> TypedRect { - TypedRect::new(self.origin / scale, self.size / scale) - } -} - -impl TypedRect { - /// Drop the units, preserving only the numeric value. - pub fn to_untyped(&self) -> Rect { - TypedRect::new(self.origin.to_untyped(), self.size.to_untyped()) - } - - /// Tag a unitless value with units. - pub fn from_untyped(r: &Rect) -> TypedRect { - TypedRect::new(TypedPoint2D::from_untyped(&r.origin), TypedSize2D::from_untyped(&r.size)) - } -} - -impl TypedRect { - /// Cast from one numeric representation to another, preserving the units. - /// - /// When casting from floating point to integer coordinates, the decimals are truncated - /// as one would expect from a simple cast, but this behavior does not always make sense - /// geometrically. Consider using round(), round_in or round_out() before casting. - pub fn cast(&self) -> Option> { - match (self.origin.cast(), self.size.cast()) { - (Some(origin), Some(size)) => Some(TypedRect::new(origin, size)), - _ => None - } - } -} - -impl + Sub, U> TypedRect { - /// Return a rectangle with edges rounded to integer coordinates, such that - /// the returned rectangle has the same set of pixel centers as the original - /// one. - /// Edges at offset 0.5 round up. - /// Suitable for most places where integral device coordinates - /// are needed, but note that any translation should be applied first to - /// avoid pixel rounding errors. - /// Note that this is *not* rounding to nearest integer if the values are negative. - /// They are always rounding as floor(n + 0.5). - pub fn round(&self) -> Self { - let origin = self.origin.round(); - let size = self.origin.add_size(&self.size).round() - origin; - TypedRect::new(origin, TypedSize2D::new(size.x, size.y)) - } - - /// Return a rectangle with edges rounded to integer coordinates, such that - /// the original rectangle contains the resulting rectangle. - pub fn round_in(&self) -> Self { - let origin = self.origin.ceil(); - let size = self.origin.add_size(&self.size).floor() - origin; - TypedRect::new(origin, TypedSize2D::new(size.x, size.y)) - } - - /// Return a rectangle with edges rounded to integer coordinates, such that - /// the original rectangle is contained in the resulting rectangle. - pub fn round_out(&self) -> Self { - let origin = self.origin.floor(); - let size = self.origin.add_size(&self.size).ceil() - origin; - TypedRect::new(origin, TypedSize2D::new(size.x, size.y)) - } -} - -// Convenience functions for common casts -impl TypedRect { - /// Cast into an f32 vector. - pub fn to_f32(&self) -> TypedRect { - self.cast().unwrap() - } - - /// Cast into an usize vector, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), round_in() or round_out() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_uint(&self) -> TypedRect { - self.cast().unwrap() - } - - /// Cast into an i32 vector, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), round_in() or round_out() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i32(&self) -> TypedRect { - self.cast().unwrap() - } - - /// Cast into an i64 vector, truncating decimals if any. - /// - /// When casting from floating point vectors, it is worth considering whether - /// to round(), round_in() or round_out() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i64(&self) -> TypedRect { - self.cast().unwrap() - } -} - -/// Shorthand for TypedRect::new(TypedPoint2D::new(x, y), TypedSize2D::new(w, h)). -pub fn rect(x: T, y: T, w: T, h: T) -> TypedRect { - TypedRect::new(TypedPoint2D::new(x, y), TypedSize2D::new(w, h)) -} - -#[cfg(test)] -mod tests { - use point::Point2D; - use size::Size2D; - use super::*; - - #[test] - fn test_min_max() { - assert!(min(0u32, 1u32) == 0u32); - assert!(min(-1.0f32, 0.0f32) == -1.0f32); - - assert!(max(0u32, 1u32) == 1u32); - assert!(max(-1.0f32, 0.0f32) == 0.0f32); - } - - #[test] - fn test_translate() { - let p = Rect::new(Point2D::new(0u32, 0u32), Size2D::new(50u32, 40u32)); - let pp = p.translate(&Point2D::new(10,15)); - - assert!(pp.size.width == 50); - assert!(pp.size.height == 40); - assert!(pp.origin.x == 10); - assert!(pp.origin.y == 15); - - - let r = Rect::new(Point2D::new(-10, -5), Size2D::new(50, 40)); - let rr = r.translate(&Point2D::new(0,-10)); - - assert!(rr.size.width == 50); - assert!(rr.size.height == 40); - assert!(rr.origin.x == -10); - assert!(rr.origin.y == -15); - } - - #[test] - fn test_translate_by_size() { - let p = Rect::new(Point2D::new(0u32, 0u32), Size2D::new(50u32, 40u32)); - let pp = p.translate_by_size(&Size2D::new(10,15)); - - assert!(pp.size.width == 50); - assert!(pp.size.height == 40); - assert!(pp.origin.x == 10); - assert!(pp.origin.y == 15); - - - let r = Rect::new(Point2D::new(-10, -5), Size2D::new(50, 40)); - let rr = r.translate_by_size(&Size2D::new(0,-10)); - - assert!(rr.size.width == 50); - assert!(rr.size.height == 40); - assert!(rr.origin.x == -10); - assert!(rr.origin.y == -15); - } - - #[test] - fn test_union() { - let p = Rect::new(Point2D::new(0, 0), Size2D::new(50, 40)); - let q = Rect::new(Point2D::new(20,20), Size2D::new(5, 5)); - let r = Rect::new(Point2D::new(-15, -30), Size2D::new(200, 15)); - let s = Rect::new(Point2D::new(20, -15), Size2D::new(250, 200)); - - let pq = p.union(&q); - assert!(pq.origin == Point2D::new(0, 0)); - assert!(pq.size == Size2D::new(50, 40)); - - let pr = p.union(&r); - assert!(pr.origin == Point2D::new(-15, -30)); - assert!(pr.size == Size2D::new(200, 70)); - - let ps = p.union(&s); - assert!(ps.origin == Point2D::new(0, -15)); - assert!(ps.size == Size2D::new(270, 200)); - - } - - #[test] - fn test_intersection() { - let p = Rect::new(Point2D::new(0, 0), Size2D::new(10, 20)); - let q = Rect::new(Point2D::new(5, 15), Size2D::new(10, 10)); - let r = Rect::new(Point2D::new(-5, -5), Size2D::new(8, 8)); - - let pq = p.intersection(&q); - assert!(pq.is_some()); - let pq = pq.unwrap(); - assert!(pq.origin == Point2D::new(5, 15)); - assert!(pq.size == Size2D::new(5, 5)); - - let pr = p.intersection(&r); - assert!(pr.is_some()); - let pr = pr.unwrap(); - assert!(pr.origin == Point2D::new(0, 0)); - assert!(pr.size == Size2D::new(3, 3)); - - let qr = q.intersection(&r); - assert!(qr.is_none()); - } - - #[test] - fn test_contains() { - let r = Rect::new(Point2D::new(-20, 15), Size2D::new(100, 200)); - - assert!(r.contains(&Point2D::new(0, 50))); - assert!(r.contains(&Point2D::new(-10, 200))); - - // The `contains` method is inclusive of the top/left edges, but not the - // bottom/right edges. - assert!(r.contains(&Point2D::new(-20, 15))); - assert!(!r.contains(&Point2D::new(80, 15))); - assert!(!r.contains(&Point2D::new(80, 215))); - assert!(!r.contains(&Point2D::new(-20, 215))); - - // Points beyond the top-left corner. - assert!(!r.contains(&Point2D::new(-25, 15))); - assert!(!r.contains(&Point2D::new(-15, 10))); - - // Points beyond the top-right corner. - assert!(!r.contains(&Point2D::new(85, 20))); - assert!(!r.contains(&Point2D::new(75, 10))); - - // Points beyond the bottom-right corner. - assert!(!r.contains(&Point2D::new(85, 210))); - assert!(!r.contains(&Point2D::new(75, 220))); - - // Points beyond the bottom-left corner. - assert!(!r.contains(&Point2D::new(-25, 210))); - assert!(!r.contains(&Point2D::new(-15, 220))); - - let r = Rect::new(Point2D::new(-20.0, 15.0), Size2D::new(100.0, 200.0)); - assert!(r.contains_rect(&r)); - assert!(!r.contains_rect(&r.translate(&Point2D::new( 0.1, 0.0)))); - assert!(!r.contains_rect(&r.translate(&Point2D::new(-0.1, 0.0)))); - assert!(!r.contains_rect(&r.translate(&Point2D::new( 0.0, 0.1)))); - assert!(!r.contains_rect(&r.translate(&Point2D::new( 0.0, -0.1)))); - // Empty rectangles are always considered as contained in other rectangles, - // even if their origin is not. - let p = Point2D::new(1.0, 1.0); - assert!(!r.contains(&p)); - assert!(r.contains_rect(&Rect::new(p, Size2D::zero()))); - } - - #[test] - fn test_scale() { - let p = Rect::new(Point2D::new(0u32, 0u32), Size2D::new(50u32, 40u32)); - let pp = p.scale(10, 15); - - assert!(pp.size.width == 500); - assert!(pp.size.height == 600); - assert!(pp.origin.x == 0); - assert!(pp.origin.y == 0); - - let r = Rect::new(Point2D::new(-10, -5), Size2D::new(50, 40)); - let rr = r.scale(1, 20); - - assert!(rr.size.width == 50); - assert!(rr.size.height == 800); - assert!(rr.origin.x == -10); - assert!(rr.origin.y == -100); - } - - #[test] - fn test_inflate() { - let p = Rect::new(Point2D::new(0, 0), Size2D::new(10, 10)); - let pp = p.inflate(10, 20); - - assert!(pp.size.width == 30); - assert!(pp.size.height == 50); - assert!(pp.origin.x == -10); - assert!(pp.origin.y == -20); - - let r = Rect::new(Point2D::new(0, 0), Size2D::new(10, 20)); - let rr = r.inflate(-2, -5); - - assert!(rr.size.width == 6); - assert!(rr.size.height == 10); - assert!(rr.origin.x == 2); - assert!(rr.origin.y == 5); - } - - #[test] - fn test_min_max_x_y() { - let p = Rect::new(Point2D::new(0u32, 0u32), Size2D::new(50u32, 40u32)); - assert!(p.max_y() == 40); - assert!(p.min_y() == 0); - assert!(p.max_x() == 50); - assert!(p.min_x() == 0); - - let r = Rect::new(Point2D::new(-10, -5), Size2D::new(50, 40)); - assert!(r.max_y() == 35); - assert!(r.min_y() == -5); - assert!(r.max_x() == 40); - assert!(r.min_x() == -10); - } - - #[test] - fn test_is_empty() { - assert!(Rect::new(Point2D::new(0u32, 0u32), Size2D::new(0u32, 0u32)).is_empty()); - assert!(Rect::new(Point2D::new(0u32, 0u32), Size2D::new(10u32, 0u32)).is_empty()); - assert!(Rect::new(Point2D::new(0u32, 0u32), Size2D::new(0u32, 10u32)).is_empty()); - assert!(!Rect::new(Point2D::new(0u32, 0u32), Size2D::new(1u32, 1u32)).is_empty()); - assert!(Rect::new(Point2D::new(10u32, 10u32), Size2D::new(0u32, 0u32)).is_empty()); - assert!(Rect::new(Point2D::new(10u32, 10u32), Size2D::new(10u32, 0u32)).is_empty()); - assert!(Rect::new(Point2D::new(10u32, 10u32), Size2D::new(0u32, 10u32)).is_empty()); - assert!(!Rect::new(Point2D::new(10u32, 10u32), Size2D::new(1u32, 1u32)).is_empty()); - } - - #[test] - fn test_round() { - let mut x = -2.0; - let mut y = -2.0; - let mut w = -2.0; - let mut h = -2.0; - while x < 2.0 { - while y < 2.0 { - while w < 2.0 { - while h < 2.0 { - let rect = Rect::new(Point2D::new(x, y), Size2D::new(w, h)); - - assert!(rect.contains_rect(&rect.round_in())); - assert!(rect.round_in().inflate(1.0, 1.0).contains_rect(&rect)); - - assert!(rect.round_out().contains_rect(&rect)); - assert!(rect.inflate(1.0, 1.0).contains_rect(&rect.round_out())); - - assert!(rect.inflate(1.0, 1.0).contains_rect(&rect.round())); - assert!(rect.round().inflate(1.0, 1.0).contains_rect(&rect)); - - h += 0.1; - } - w += 0.1; - } - y += 0.1; - } - x += 0.1 - } - } -} diff --git a/third_party/rust/euclid-0.10.5/src/scale_factor.rs b/third_party/rust/euclid-0.10.5/src/scale_factor.rs deleted file mode 100644 index bd0048868abb..000000000000 --- a/third_party/rust/euclid-0.10.5/src/scale_factor.rs +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2014 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. -//! A type-checked scaling factor between units. - -use num::One; - -use heapsize::HeapSizeOf; -use num_traits::NumCast; -use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use std::fmt; -use std::ops::{Add, Mul, Sub, Div}; -use std::marker::PhantomData; - -/// A scaling factor between two different units of measurement. -/// -/// This is effectively a type-safe float, intended to be used in combination with other types like -/// `length::Length` to enforce conversion between systems of measurement at compile time. -/// -/// `Src` and `Dst` represent the units before and after multiplying a value by a `ScaleFactor`. They -/// may be types without values, such as empty enums. For example: -/// -/// ```rust -/// use euclid::scale_factor::ScaleFactor; -/// use euclid::length::Length; -/// enum Mm {}; -/// enum Inch {}; -/// -/// let mm_per_inch: ScaleFactor = ScaleFactor::new(25.4); -/// -/// let one_foot: Length = Length::new(12.0); -/// let one_foot_in_mm: Length = one_foot * mm_per_inch; -/// ``` -#[derive(RustcDecodable, RustcEncodable)] -pub struct ScaleFactor(pub T, PhantomData<(Src, Dst)>); - -impl HeapSizeOf for ScaleFactor { - fn heap_size_of_children(&self) -> usize { - self.0.heap_size_of_children() - } -} - -impl Deserialize for ScaleFactor where T: Deserialize { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer { - Ok(ScaleFactor(try!(Deserialize::deserialize(deserializer)), PhantomData)) - } -} - -impl Serialize for ScaleFactor where T: Serialize { - fn serialize(&self, serializer: &mut S) -> Result<(),S::Error> where S: Serializer { - self.0.serialize(serializer) - } -} - -impl ScaleFactor { - pub fn new(x: T) -> ScaleFactor { - ScaleFactor(x, PhantomData) - } -} - -impl ScaleFactor { - pub fn get(&self) -> T { - self.0.clone() - } -} - -impl, Src, Dst> ScaleFactor { - /// The inverse ScaleFactor (1.0 / self). - pub fn inv(&self) -> ScaleFactor { - let one: T = One::one(); - ScaleFactor::new(one / self.get()) - } -} - -// scale0 * scale1 -impl, A, B, C> -Mul> for ScaleFactor { - type Output = ScaleFactor; - #[inline] - fn mul(self, other: ScaleFactor) -> ScaleFactor { - ScaleFactor::new(self.get() * other.get()) - } -} - -// scale0 + scale1 -impl, Src, Dst> Add for ScaleFactor { - type Output = ScaleFactor; - #[inline] - fn add(self, other: ScaleFactor) -> ScaleFactor { - ScaleFactor::new(self.get() + other.get()) - } -} - -// scale0 - scale1 -impl, Src, Dst> Sub for ScaleFactor { - type Output = ScaleFactor; - #[inline] - fn sub(self, other: ScaleFactor) -> ScaleFactor { - ScaleFactor::new(self.get() - other.get()) - } -} - -impl ScaleFactor { - /// Cast from one numeric representation to another, preserving the units. - pub fn cast(&self) -> Option> { - NumCast::from(self.get()).map(ScaleFactor::new) - } -} - -// FIXME: Switch to `derive(PartialEq, Clone)` after this Rust issue is fixed: -// https://github.com/mozilla/rust/issues/7671 - -impl PartialEq for ScaleFactor { - fn eq(&self, other: &ScaleFactor) -> bool { - self.0 == other.0 - } -} - -impl Clone for ScaleFactor { - fn clone(&self) -> ScaleFactor { - ScaleFactor::new(self.get()) - } -} - -impl Copy for ScaleFactor {} - -impl fmt::Debug for ScaleFactor { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.0.fmt(f) - } -} - -impl fmt::Display for ScaleFactor { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.0.fmt(f) - } -} - -#[cfg(test)] -mod tests { - use super::ScaleFactor; - - enum Inch {} - enum Cm {} - enum Mm {} - - #[test] - fn test_scale_factor() { - let mm_per_inch: ScaleFactor = ScaleFactor::new(25.4); - let cm_per_mm: ScaleFactor = ScaleFactor::new(0.1); - - let mm_per_cm: ScaleFactor = cm_per_mm.inv(); - assert_eq!(mm_per_cm.get(), 10.0); - - let cm_per_inch: ScaleFactor = mm_per_inch * cm_per_mm; - assert_eq!(cm_per_inch, ScaleFactor::new(2.54)); - - let a: ScaleFactor = ScaleFactor::new(2); - let b: ScaleFactor = ScaleFactor::new(3); - assert!(a != b); - assert_eq!(a, a.clone()); - assert_eq!(a.clone() + b.clone(), ScaleFactor::new(5)); - assert_eq!(a - b, ScaleFactor::new(-1)); - } -} diff --git a/third_party/rust/euclid-0.10.5/src/side_offsets.rs b/third_party/rust/euclid-0.10.5/src/side_offsets.rs deleted file mode 100644 index 7a1a7487e2e7..000000000000 --- a/third_party/rust/euclid-0.10.5/src/side_offsets.rs +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -//! A group of side offsets, which correspond to top/left/bottom/right for borders, padding, -//! and margins in CSS. - -use super::UnknownUnit; -use length::Length; -use num::Zero; -use std::fmt; -use std::ops::Add; -use std::marker::PhantomData; - -#[cfg(feature = "unstable")] -use heapsize::HeapSizeOf; - -/// A group of side offsets, which correspond to top/left/bottom/right for borders, padding, -/// and margins in CSS, optionally tagged with a unit. -define_matrix! { - pub struct TypedSideOffsets2D { - pub top: T, - pub right: T, - pub bottom: T, - pub left: T, - } -} - -impl fmt::Debug for TypedSideOffsets2D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "({:?},{:?},{:?},{:?})", - self.top, self.right, self.bottom, self.left) - } -} - -/// The default side offset type with no unit. -pub type SideOffsets2D = TypedSideOffsets2D; - -impl TypedSideOffsets2D { - /// Constructor taking a scalar for each side. - pub fn new(top: T, right: T, bottom: T, left: T) -> TypedSideOffsets2D { - TypedSideOffsets2D { - top: top, - right: right, - bottom: bottom, - left: left, - _unit: PhantomData, - } - } - - /// Constructor taking a typed Length for each side. - pub fn from_lengths(top: Length, - right: Length, - bottom: Length, - left: Length) -> TypedSideOffsets2D { - TypedSideOffsets2D::new(top.0, right.0, bottom.0, left.0) - } - - /// Access self.top as a typed Length instead of a scalar value. - pub fn top_typed(&self) -> Length { Length::new(self.top) } - - /// Access self.right as a typed Length instead of a scalar value. - pub fn right_typed(&self) -> Length { Length::new(self.right) } - - /// Access self.bottom as a typed Length instead of a scalar value. - pub fn bottom_typed(&self) -> Length { Length::new(self.bottom) } - - /// Access self.left as a typed Length instead of a scalar value. - pub fn left_typed(&self) -> Length { Length::new(self.left) } - - /// Constructor setting the same value to all sides, taking a scalar value directly. - pub fn new_all_same(all: T) -> TypedSideOffsets2D { - TypedSideOffsets2D::new(all, all, all, all) - } - - /// Constructor setting the same value to all sides, taking a typed Length. - pub fn from_length_all_same(all: Length) -> TypedSideOffsets2D { - TypedSideOffsets2D::new_all_same(all.0) - } -} - -impl TypedSideOffsets2D where T: Add + Copy { - pub fn horizontal(&self) -> T { - self.left + self.right - } - - pub fn vertical(&self) -> T { - self.top + self.bottom - } - - pub fn horizontal_typed(&self) -> Length { - Length::new(self.horizontal()) - } - - pub fn vertical_typed(&self) -> Length { - Length::new(self.vertical()) - } -} - -impl Add for TypedSideOffsets2D where T : Copy + Add { - type Output = TypedSideOffsets2D; - fn add(self, other: TypedSideOffsets2D) -> TypedSideOffsets2D { - TypedSideOffsets2D::new( - self.top + other.top, - self.right + other.right, - self.bottom + other.bottom, - self.left + other.left, - ) - } -} - -impl TypedSideOffsets2D { - /// Constructor, setting all sides to zero. - pub fn zero() -> TypedSideOffsets2D { - TypedSideOffsets2D::new( - Zero::zero(), - Zero::zero(), - Zero::zero(), - Zero::zero(), - ) - } -} - -/// A SIMD enabled version of TypedSideOffsets2D specialized for i32. -#[cfg(feature = "unstable")] -#[derive(Clone, Copy, PartialEq)] -#[repr(simd)] -pub struct SideOffsets2DSimdI32 { - pub top: i32, - pub bottom: i32, - pub right: i32, - pub left: i32, -} - -#[cfg(feature = "unstable")] -impl HeapSizeOf for SideOffsets2DSimdI32 { - fn heap_size_of_children(&self) -> usize { 0 } -} - -#[cfg(feature = "unstable")] -impl SideOffsets2DSimdI32 { - #[inline] - pub fn new(top: i32, right: i32, bottom: i32, left: i32) -> SideOffsets2DSimdI32 { - SideOffsets2DSimdI32 { - top: top, - bottom: bottom, - right: right, - left: left, - } - } -} - -#[cfg(feature = "unstable")] -impl SideOffsets2DSimdI32 { - #[inline] - pub fn new_all_same(all: i32) -> SideOffsets2DSimdI32 { - SideOffsets2DSimdI32::new(all.clone(), all.clone(), all.clone(), all.clone()) - } -} - -#[cfg(feature = "unstable")] -impl SideOffsets2DSimdI32 { - #[inline] - pub fn horizontal(&self) -> i32 { - self.left + self.right - } - - #[inline] - pub fn vertical(&self) -> i32 { - self.top + self.bottom - } -} - -/*impl Add for SideOffsets2DSimdI32 { - type Output = SideOffsets2DSimdI32; - #[inline] - fn add(self, other: SideOffsets2DSimdI32) -> SideOffsets2DSimdI32 { - self + other // Use SIMD addition - } -}*/ - -#[cfg(feature = "unstable")] -impl SideOffsets2DSimdI32 { - #[inline] - pub fn zero() -> SideOffsets2DSimdI32 { - SideOffsets2DSimdI32 { - top: 0, - bottom: 0, - right: 0, - left: 0, - } - } - - #[cfg(not(target_arch = "x86_64"))] - #[inline] - pub fn is_zero(&self) -> bool { - self.top == 0 && self.right == 0 && self.bottom == 0 && self.left == 0 - } - - #[cfg(target_arch = "x86_64")] - #[inline] - pub fn is_zero(&self) -> bool { - let is_zero: bool; - unsafe { - asm! { - "ptest $1, $1 - setz $0" - : "=r"(is_zero) - : "x"(*self) - : - : "intel" - }; - } - is_zero - } -} - -#[cfg(feature = "unstable")] -#[cfg(test)] -mod tests { - use super::SideOffsets2DSimdI32; - - #[test] - fn test_is_zero() { - assert!(SideOffsets2DSimdI32::new_all_same(0).is_zero()); - assert!(!SideOffsets2DSimdI32::new_all_same(1).is_zero()); - assert!(!SideOffsets2DSimdI32::new(1, 0, 0, 0).is_zero()); - assert!(!SideOffsets2DSimdI32::new(0, 1, 0, 0).is_zero()); - assert!(!SideOffsets2DSimdI32::new(0, 0, 1, 0).is_zero()); - assert!(!SideOffsets2DSimdI32::new(0, 0, 0, 1).is_zero()); - } -} - -#[cfg(feature = "unstable")] -#[cfg(bench)] -mod bench { - use test::BenchHarness; - use std::num::Zero; - use rand::{XorShiftRng, Rng}; - use super::SideOffsets2DSimdI32; - - #[cfg(target_arch = "x86")] - #[cfg(target_arch = "x86_64")] - #[bench] - fn bench_naive_is_zero(bh: &mut BenchHarness) { - fn is_zero(x: &SideOffsets2DSimdI32) -> bool { - x.top.is_zero() && x.right.is_zero() && x.bottom.is_zero() && x.left.is_zero() - } - let mut rng = XorShiftRng::new().unwrap(); - bh.iter(|| is_zero(&rng.gen::())) - } - - #[bench] - fn bench_is_zero(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new().unwrap(); - bh.iter(|| rng.gen::().is_zero()) - } - - #[bench] - fn bench_naive_add(bh: &mut BenchHarness) { - fn add(x: &SideOffsets2DSimdI32, y: &SideOffsets2DSimdI32) -> SideOffsets2DSimdI32 { - SideOffsets2DSimdI32 { - top: x.top + y.top, - right: x.right + y.right, - bottom: x.bottom + y.bottom, - left: x.left + y.left, - } - } - let mut rng = XorShiftRng::new().unwrap(); - bh.iter(|| add(&rng.gen::(), &rng.gen::())) - } - - #[bench] - fn bench_add(bh: &mut BenchHarness) { - let mut rng = XorShiftRng::new().unwrap(); - bh.iter(|| rng.gen::() + rng.gen::()) - } -} diff --git a/third_party/rust/euclid-0.10.5/src/size.rs b/third_party/rust/euclid-0.10.5/src/size.rs deleted file mode 100644 index ff0301cf594e..000000000000 --- a/third_party/rust/euclid-0.10.5/src/size.rs +++ /dev/null @@ -1,276 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use super::UnknownUnit; -use length::Length; -use scale_factor::ScaleFactor; -use num::*; - -use num_traits::NumCast; -use std::fmt; -use std::ops::{Add, Div, Mul, Sub}; -use std::marker::PhantomData; - -/// A 2d size tagged with a unit. -define_matrix! { - #[derive(RustcDecodable, RustcEncodable)] - pub struct TypedSize2D { - pub width: T, - pub height: T, - } -} - -/// Default 2d size type with no unit. -/// -/// `Size2D` provides the same methods as `TypedSize2D`. -pub type Size2D = TypedSize2D; - -impl fmt::Debug for TypedSize2D { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{:?}×{:?}", self.width, self.height) - } -} - -impl fmt::Display for TypedSize2D { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - write!(formatter, "({}x{})", self.width, self.height) - } -} - -impl TypedSize2D { - /// Constructor taking scalar values. - pub fn new(width: T, height: T) -> TypedSize2D { - TypedSize2D { - width: width, - height: height, - _unit: PhantomData, - } - } -} - -impl TypedSize2D { - /// Constructor taking scalar stronlgy typed lengths. - pub fn from_lengths(width: Length, height: Length) -> TypedSize2D { - TypedSize2D::new(width.get(), height.get()) - } -} - -impl TypedSize2D { - /// Rounds each component to the nearest integer value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn round(&self) -> Self { - TypedSize2D::new(self.width.round(), self.height.round()) - } -} - -impl TypedSize2D { - /// Rounds each component to the smallest integer equal or greater than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn ceil(&self) -> Self { - TypedSize2D::new(self.width.ceil(), self.height.ceil()) - } -} - -impl TypedSize2D { - /// Rounds each component to the biggest integer equal or lower than the orginal value. - /// - /// This behavior is preserved for negative values (unlike the basic cast). - pub fn floor(&self) -> Self { - TypedSize2D::new(self.width.floor(), self.height.floor()) - } -} - -impl, U> Add for TypedSize2D { - type Output = TypedSize2D; - fn add(self, other: TypedSize2D) -> TypedSize2D { - TypedSize2D::new(self.width + other.width, self.height + other.height) - } -} - -impl, U> Sub for TypedSize2D { - type Output = TypedSize2D; - fn sub(self, other: TypedSize2D) -> TypedSize2D { - TypedSize2D::new(self.width - other.width, self.height - other.height) - } -} - -impl, U> TypedSize2D { - pub fn area(&self) -> U { self.width * self.height } -} - -impl TypedSize2D { - pub fn zero() -> TypedSize2D { - TypedSize2D::new( - Zero::zero(), - Zero::zero(), - ) - } -} - -impl Zero for TypedSize2D { - fn zero() -> TypedSize2D { - TypedSize2D::new( - Zero::zero(), - Zero::zero(), - ) - } -} - -impl, U> Mul for TypedSize2D { - type Output = TypedSize2D; - #[inline] - fn mul(self, scale: T) -> TypedSize2D { - TypedSize2D::new(self.width * scale, self.height * scale) - } -} - -impl, U> Div for TypedSize2D { - type Output = TypedSize2D; - #[inline] - fn div(self, scale: T) -> TypedSize2D { - TypedSize2D::new(self.width / scale, self.height / scale) - } -} - -impl, U1, U2> Mul> for TypedSize2D { - type Output = TypedSize2D; - #[inline] - fn mul(self, scale: ScaleFactor) -> TypedSize2D { - TypedSize2D::new(self.width * scale.get(), self.height * scale.get()) - } -} - -impl, U1, U2> Div> for TypedSize2D { - type Output = TypedSize2D; - #[inline] - fn div(self, scale: ScaleFactor) -> TypedSize2D { - TypedSize2D::new(self.width / scale.get(), self.height / scale.get()) - } -} - -impl TypedSize2D { - /// Returns self.width as a Length carrying the unit. - #[inline] - pub fn width_typed(&self) -> Length { Length::new(self.width) } - - /// Returns self.height as a Length carrying the unit. - #[inline] - pub fn height_typed(&self) -> Length { Length::new(self.height) } - - #[inline] - pub fn to_array(&self) -> [T; 2] { [self.width, self.height] } - - /// Drop the units, preserving only the numeric value. - pub fn to_untyped(&self) -> Size2D { - TypedSize2D::new(self.width, self.height) - } - - /// Tag a unitless value with units. - pub fn from_untyped(p: &Size2D) -> TypedSize2D { - TypedSize2D::new(p.width, p.height) - } -} - -impl TypedSize2D { - /// Cast from one numeric representation to another, preserving the units. - /// - /// When casting from floating point to integer coordinates, the decimals are truncated - /// as one would expect from a simple cast, but this behavior does not always marke sense - /// geometrically. Consider using round(), ceil or floor() before casting. - pub fn cast(&self) -> Option> { - match (NumCast::from(self.width), NumCast::from(self.height)) { - (Some(w), Some(h)) => Some(TypedSize2D::new(w, h)), - _ => None - } - } - - // Convenience functions for common casts - - /// Cast into an f32 size. - pub fn to_f32(&self) -> TypedSize2D { - self.cast().unwrap() - } - - /// Cast into an usize size, truncating decimals if any. - /// - /// When casting from floating point sizes, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_uint(&self) -> TypedSize2D { - self.cast().unwrap() - } - - /// Cast into an i32 size, truncating decimals if any. - /// - /// When casting from floating point sizes, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i32(&self) -> TypedSize2D { - self.cast().unwrap() - } - - /// Cast into an i64 size, truncating decimals if any. - /// - /// When casting from floating point sizes, it is worth considering whether - /// to round(), ceil() or floor() before the cast in order to obtain the desired - /// conversion behavior. - pub fn to_i64(&self) -> TypedSize2D { - self.cast().unwrap() - } -} - -/// Shorthand for TypedSize2D::new(w, h). -pub fn size2(w: T, h: T) -> TypedSize2D { - TypedSize2D::new(w, h) -} - -#[cfg(test)] -mod size2d { - use super::Size2D; - - #[test] - pub fn test_add() { - let p1 = Size2D::new(1.0, 2.0); - let p2 = Size2D::new(3.0, 4.0); - assert_eq!(p1 + p2, Size2D::new(4.0, 6.0)); - - let p1 = Size2D::new(1.0, 2.0); - let p2 = Size2D::new(0.0, 0.0); - assert_eq!(p1 + p2, Size2D::new(1.0, 2.0)); - - let p1 = Size2D::new(1.0, 2.0); - let p2 = Size2D::new(-3.0, -4.0); - assert_eq!(p1 + p2, Size2D::new(-2.0, -2.0)); - - let p1 = Size2D::new(0.0, 0.0); - let p2 = Size2D::new(0.0, 0.0); - assert_eq!(p1 + p2, Size2D::new(0.0, 0.0)); - } - - #[test] - pub fn test_sub() { - let p1 = Size2D::new(1.0, 2.0); - let p2 = Size2D::new(3.0, 4.0); - assert_eq!(p1 - p2, Size2D::new(-2.0, -2.0)); - - let p1 = Size2D::new(1.0, 2.0); - let p2 = Size2D::new(0.0, 0.0); - assert_eq!(p1 - p2, Size2D::new(1.0, 2.0)); - - let p1 = Size2D::new(1.0, 2.0); - let p2 = Size2D::new(-3.0, -4.0); - assert_eq!(p1 - p2, Size2D::new(4.0, 6.0)); - - let p1 = Size2D::new(0.0, 0.0); - let p2 = Size2D::new(0.0, 0.0); - assert_eq!(p1 - p2, Size2D::new(0.0, 0.0)); - } -} diff --git a/third_party/rust/euclid-0.10.5/src/trig.rs b/third_party/rust/euclid-0.10.5/src/trig.rs deleted file mode 100644 index 6f3f348a9b1a..000000000000 --- a/third_party/rust/euclid-0.10.5/src/trig.rs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2013 The Servo Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - - -/// Trait for basic trigonometry functions, so they can be used on generic numeric types -pub trait Trig { - fn sin(self) -> Self; - fn cos(self) -> Self; - fn tan(self) -> Self; -} - -impl Trig for f32 { - #[inline] - fn sin(self) -> f32 { - self.sin() - } - - #[inline] - fn cos(self) -> f32 { - self.cos() - } - - #[inline] - fn tan(self) -> f32 { - self.tan() - } -} - -impl Trig for f64 { - #[inline] - fn sin(self) -> f64 { - self.sin() - } - - #[inline] - fn cos(self) -> f64 { - self.cos() - } - - #[inline] - fn tan(self) -> f64 { - self.tan() - } -} diff --git a/third_party/rust/offscreen_gl_context/.cargo-checksum.json b/third_party/rust/offscreen_gl_context/.cargo-checksum.json index b48e8deb848e..d4f189758ab5 100644 --- a/third_party/rust/offscreen_gl_context/.cargo-checksum.json +++ b/third_party/rust/offscreen_gl_context/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"7150ee9391a955b2ef7e0762fc61c0c1aab167620ca36d88d78062d93b8334ba",".travis.yml":"9b8376fc479996f32f8a690e6009fc2f7e9f6dc1b1224e0180a92ad65b0b2183","Cargo.toml":"50ad80c8c43d09fbf1360736cfb7a9ba122c9ab080facebc83788313dfefce72","Makefile":"85b6d903eecac170ac97f10d9d89b8366cd91f5ea2f7c6212704bc590b64cf50","README.md":"614cf0c6242be3e62e45a3d60ce9a2a1581bdc46b28b25d5f40caba558e4d615","build.rs":"86776b47fac1d9368e3c3c5d57c62731729ed859bb1c4e4db0fe219251812cab","src/draw_buffer.rs":"52bef86972f40e0dd13a6e81f3aa76d4d0c28ea0b63f5f9da9650a34d75488c0","src/gl_context.rs":"28953e3752ea7fd2b19327f98c06fe53f7618efc4d3f0cb2262eba403756df2a","src/gl_context_attributes.rs":"c76ef02996d0daac313b666d1991878bbf7812932a0f9feac9e62c89ba7bf669","src/gl_context_capabilities.rs":"9f665ad04d42d47d15ecbd430639d95da526ec5951f0b7abe2434adc1415c85d","src/gl_feature.rs":"b826884900c0e8d6317a41ebb6c30bdb468601bf1c030c376749bdb2ecd2f15a","src/gl_formats.rs":"99087345b4e9a12c86605c0d091bfaf1b4ed4b2475a3b6f91d2127a2bb85fe1b","src/gl_limits.rs":"02e41619518daae5895929db00d073b5ad0d9daf9319a61abb7012c2e59fb6c7","src/lib.rs":"daaf4e26504dbb97f3803de4337f601d616adf0633e5c4415c2c172fb257ebd6","src/platform/mod.rs":"f6ec310e5b8fb519607b8e4d5ca71a0c07c83737a83c3785b5b44e7902498c8a","src/platform/not_implemented/mod.rs":"d576e9fc3164f9e2a8ff9460a60eaa8ecada44c600de1a4d1bb5513ab93569af","src/platform/not_implemented/native_gl_context.rs":"fe018722b8bebbd59b6fae759dd78b0175d10bf110205b113ff155fd06d0f75d","src/platform/with_cgl/mod.rs":"b05dc146c9ba82d62410d9b0566a8aa70c77e7ec583ad4881c531d7118454543","src/platform/with_cgl/native_gl_context.rs":"c6271cfa96836d8f833f5efbc90352852557d582db41d2c513cc36c3f966ae88","src/platform/with_egl/mod.rs":"c52ac147eb051733070c36b2c62be8c57427f80999507f62a9ce801f4aac284c","src/platform/with_egl/native_gl_context.rs":"3a8342d53de9525a5478cc96b323dbad2b3628aa6655fe5f092834cc72256116","src/platform/with_egl/utils.rs":"508521e2bf3809ffe0dfea4fa4a358903f49c77a33aa42cc6c0e7458d992a2a7","src/platform/with_glx/mod.rs":"0e497f38b2071ed189995c91b27b0b199d31bfcc10836e2d26b55023d7aff503","src/platform/with_glx/native_gl_context.rs":"2c648ae18baac14290b2eca3581d474adfea00a29a7ad47a1100e564e74b9152","src/platform/with_glx/utils.rs":"eb81e0a4c62947fa5099c241cfe2e4dd075376d30b22864e042c0f536ac6be58","src/platform/with_osmesa/mod.rs":"9f6d69878125185f16740f52ba5cdd8a45e8812af1a3561482c9b43edaf4514a","src/platform/with_wgl/mod.rs":"38f9b44b54c8a1bd4d25ae77a4ea6a2e5454a00b816764d7d74152c1f3c1b126","src/platform/with_wgl/native_gl_context.rs":"4aecd40a811cf38607b17db9724f79bb934e056f85c90c987b2aa82d637b7bb4","src/platform/with_wgl/utils.rs":"d9640c000dcb513cf0a13c4a0d35c423366b7d0894deff299affe0202bdeb770","src/platform/with_wgl/wgl_attributes.rs":"73b75da18519e048011e9c303e402cf7961e3652aa8f4d4ebf507b4ab83d06a3","src/tests.rs":"780d4211a02c09abebb2b8be85a87ed98bee374999bd333c29efb3a8c7d2b281"},"package":"171f74d51d4c94dae19d13c502dbf09afab328a5517f8bfeee2f2a33ced3bca9"} \ No newline at end of file +{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"7150ee9391a955b2ef7e0762fc61c0c1aab167620ca36d88d78062d93b8334ba",".travis.yml":"9b8376fc479996f32f8a690e6009fc2f7e9f6dc1b1224e0180a92ad65b0b2183","Cargo.toml":"2377d25abb4a8cd857355e101af61480e9e5718e1d5fcfb12e41993b8ec211c9","Makefile":"85b6d903eecac170ac97f10d9d89b8366cd91f5ea2f7c6212704bc590b64cf50","README.md":"614cf0c6242be3e62e45a3d60ce9a2a1581bdc46b28b25d5f40caba558e4d615","build.rs":"86776b47fac1d9368e3c3c5d57c62731729ed859bb1c4e4db0fe219251812cab","src/draw_buffer.rs":"52bef86972f40e0dd13a6e81f3aa76d4d0c28ea0b63f5f9da9650a34d75488c0","src/gl_context.rs":"28953e3752ea7fd2b19327f98c06fe53f7618efc4d3f0cb2262eba403756df2a","src/gl_context_attributes.rs":"8ddf99864f838ba847783d824e85eb71c8eea7d5dfb9950737dfb1472a33a4f6","src/gl_context_capabilities.rs":"9f665ad04d42d47d15ecbd430639d95da526ec5951f0b7abe2434adc1415c85d","src/gl_feature.rs":"b826884900c0e8d6317a41ebb6c30bdb468601bf1c030c376749bdb2ecd2f15a","src/gl_formats.rs":"d15a8e102ebac82c166be4ba2a6e6702a82d509ac61102157c26a0ae25f54ac7","src/gl_limits.rs":"ccecc941207f1f27d9eaf96f0ffadb03d991ab5e6ad2ef73a5af1b9dbbbd7cad","src/lib.rs":"daaf4e26504dbb97f3803de4337f601d616adf0633e5c4415c2c172fb257ebd6","src/platform/mod.rs":"f6ec310e5b8fb519607b8e4d5ca71a0c07c83737a83c3785b5b44e7902498c8a","src/platform/not_implemented/mod.rs":"d576e9fc3164f9e2a8ff9460a60eaa8ecada44c600de1a4d1bb5513ab93569af","src/platform/not_implemented/native_gl_context.rs":"fe018722b8bebbd59b6fae759dd78b0175d10bf110205b113ff155fd06d0f75d","src/platform/with_cgl/mod.rs":"b05dc146c9ba82d62410d9b0566a8aa70c77e7ec583ad4881c531d7118454543","src/platform/with_cgl/native_gl_context.rs":"c6271cfa96836d8f833f5efbc90352852557d582db41d2c513cc36c3f966ae88","src/platform/with_egl/mod.rs":"c52ac147eb051733070c36b2c62be8c57427f80999507f62a9ce801f4aac284c","src/platform/with_egl/native_gl_context.rs":"3a8342d53de9525a5478cc96b323dbad2b3628aa6655fe5f092834cc72256116","src/platform/with_egl/utils.rs":"508521e2bf3809ffe0dfea4fa4a358903f49c77a33aa42cc6c0e7458d992a2a7","src/platform/with_glx/mod.rs":"0e497f38b2071ed189995c91b27b0b199d31bfcc10836e2d26b55023d7aff503","src/platform/with_glx/native_gl_context.rs":"2c648ae18baac14290b2eca3581d474adfea00a29a7ad47a1100e564e74b9152","src/platform/with_glx/utils.rs":"eb81e0a4c62947fa5099c241cfe2e4dd075376d30b22864e042c0f536ac6be58","src/platform/with_osmesa/mod.rs":"9f6d69878125185f16740f52ba5cdd8a45e8812af1a3561482c9b43edaf4514a","src/platform/with_wgl/mod.rs":"38f9b44b54c8a1bd4d25ae77a4ea6a2e5454a00b816764d7d74152c1f3c1b126","src/platform/with_wgl/native_gl_context.rs":"4aecd40a811cf38607b17db9724f79bb934e056f85c90c987b2aa82d637b7bb4","src/platform/with_wgl/utils.rs":"d9640c000dcb513cf0a13c4a0d35c423366b7d0894deff299affe0202bdeb770","src/platform/with_wgl/wgl_attributes.rs":"73b75da18519e048011e9c303e402cf7961e3652aa8f4d4ebf507b4ab83d06a3","src/tests.rs":"a2e5ceecd6b12def2f66a5c576b4ad8ca0dce1834aebe69ebc8474a5c06ec798"},"package":"4ac875ea951d7d695a1cc8c370777d6a0e2b7355ca49506034683df09b24b1bc"} \ No newline at end of file diff --git a/third_party/rust/offscreen_gl_context/Cargo.toml b/third_party/rust/offscreen_gl_context/Cargo.toml index 432aa7183046..e5fc6c7e0c8f 100644 --- a/third_party/rust/offscreen_gl_context/Cargo.toml +++ b/third_party/rust/offscreen_gl_context/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "offscreen_gl_context" license = "MIT / Apache-2.0" -version = "0.5.5" +version = "0.6.1" authors = ["Emilio Cobos Álvarez ", "The Servo Project Developers"] description = "Creation and manipulation of HW accelerated offscreen rendering contexts in multiple platforms. Originally intended for the Servo project's WebGL implementation." repository = "https://github.com/emilio/rust-offscreen-rendering-context" @@ -13,7 +13,6 @@ gl_generator = "0.5" [features] default = [] osmesa = ["osmesa-sys"] -serde_serialization = ["serde"] # NOTE: Just for testing use, there are no other changes test_egl_in_linux = [] test_osmesa = [] @@ -21,8 +20,8 @@ test_osmesa = [] [dependencies] log = "0.3" gleam = "0.2.31" -euclid = "0.10" -serde = { version = "0.8", optional = true } +euclid = "0.11" +serde = { version = "0.9", optional = true } osmesa-sys = { version = "0.1", optional = true } [target.x86_64-apple-darwin.dependencies] diff --git a/third_party/rust/offscreen_gl_context/src/gl_context_attributes.rs b/third_party/rust/offscreen_gl_context/src/gl_context_attributes.rs index 4b351bcef977..0d855bd3069d 100644 --- a/third_party/rust/offscreen_gl_context/src/gl_context_attributes.rs +++ b/third_party/rust/offscreen_gl_context/src/gl_context_attributes.rs @@ -15,7 +15,7 @@ pub struct GLContextAttributes { #[cfg(feature = "serde")] impl Deserialize for GLContextAttributes { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: Deserializer { let values = try!(<[_; 6]>::deserialize(deserializer)); @@ -32,7 +32,7 @@ impl Deserialize for GLContextAttributes { #[cfg(feature = "serde")] impl Serialize for GLContextAttributes { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: Serializer { let values = [ diff --git a/third_party/rust/offscreen_gl_context/src/gl_formats.rs b/third_party/rust/offscreen_gl_context/src/gl_formats.rs index 87d19b0274d2..42033f67aa80 100644 --- a/third_party/rust/offscreen_gl_context/src/gl_formats.rs +++ b/third_party/rust/offscreen_gl_context/src/gl_formats.rs @@ -44,21 +44,28 @@ impl GLFormats { #[cfg(target_os="android")] pub fn detect(attrs: &GLContextAttributes) -> GLFormats { + // detect if the GPU supports RGB8 and RGBA8 renderbuffer/texture storage formats. + // GL_ARM_rgba8 extension is similar to OES_rgb8_rgba8, but only exposes RGBA8. + let extensions = gl::get_string(gl::EXTENSIONS); + let extensions: Vec<&str> = extensions.split(&[',',' '][..]).collect(); + let has_rgb8 = extensions.contains(&"GL_OES_rgb8_rgba8"); + let has_rgba8 = has_rgb8 || extensions.contains(&"GL_ARM_rgba8"); + if attrs.alpha { GLFormats { - color_renderbuffer: gl::RGBA4, + color_renderbuffer: if has_rgba8 { gl::RGBA8 } else { gl::RGBA4 }, texture_internal: gl::RGBA, texture: gl::RGBA, - texture_type: gl::UNSIGNED_SHORT_4_4_4_4, + texture_type: if has_rgba8 { gl::UNSIGNED_BYTE } else { gl::UNSIGNED_SHORT_4_4_4_4 }, depth: gl::DEPTH_COMPONENT16, stencil: gl::STENCIL_INDEX8, } } else { GLFormats { - color_renderbuffer: gl::RGB565, + color_renderbuffer: if has_rgb8 { gl::RGB8 } else { gl::RGB565 }, texture_internal: gl::RGB, texture: gl::RGB, - texture_type: gl::UNSIGNED_SHORT_4_4_4_4, + texture_type: if has_rgb8 { gl::UNSIGNED_BYTE } else { gl::UNSIGNED_SHORT_4_4_4_4 }, depth: gl::DEPTH_COMPONENT16, stencil: gl::STENCIL_INDEX8, } diff --git a/third_party/rust/offscreen_gl_context/src/gl_limits.rs b/third_party/rust/offscreen_gl_context/src/gl_limits.rs index 6c23f7a92d45..8ce343f2be77 100644 --- a/third_party/rust/offscreen_gl_context/src/gl_limits.rs +++ b/third_party/rust/offscreen_gl_context/src/gl_limits.rs @@ -11,7 +11,7 @@ pub struct GLLimits { #[cfg(feature = "serde")] impl Deserialize for GLLimits { - fn deserialize(deserializer: &mut D) -> Result + fn deserialize(deserializer: D) -> Result where D: Deserializer { let values = try!(<[_; 3]>::deserialize(deserializer)); @@ -25,7 +25,7 @@ impl Deserialize for GLLimits { #[cfg(feature = "serde")] impl Serialize for GLLimits { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: Serializer { [self.max_vertex_attribs, self.max_tex_size, self.max_cube_map_tex_size] diff --git a/third_party/rust/offscreen_gl_context/src/tests.rs b/third_party/rust/offscreen_gl_context/src/tests.rs index b6732589fa51..7fe352a61726 100644 --- a/third_party/rust/offscreen_gl_context/src/tests.rs +++ b/third_party/rust/offscreen_gl_context/src/tests.rs @@ -23,13 +23,18 @@ extern {} #[link(name="GL")] extern {} +#[cfg(not(target_os="android"))] static LOAD_GL: Once = ONCE_INIT; +#[cfg(not(target_os="android"))] fn load_gl() { LOAD_GL.call_once(|| { gl::load_with(|s| GLContext::::get_proc_address(s) as *const _); }); } +#[cfg(target_os="android")] +fn load_gl() { +} fn test_gl_context(context: &GLContext) { context.make_current().unwrap(); diff --git a/third_party/rust/serde-0.8.23/.cargo-checksum.json b/third_party/rust/serde-0.8.23/.cargo-checksum.json deleted file mode 100644 index 9d24effb39d4..000000000000 --- a/third_party/rust/serde-0.8.23/.cargo-checksum.json +++ /dev/null @@ -1 +0,0 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","Cargo.toml":"37cf6256c6eb377c59bac3c48ca9ac70b100173c1114de357084edf2a5381044","src/bytes.rs":"ec2fb40df6a1e1233462d85145a57eb33a1df0140ed921e9fe0a0ca35c7c1064","src/de/from_primitive.rs":"b1bd165e343a4380965551709119ef9ed895e4b025045a810dabd671511ba3ab","src/de/impls.rs":"3e27049398fc000ae0ec89f0358e5cd8fe55d6ddf0bc5a0a9ae9de936ce0935b","src/de/mod.rs":"62291b6b7c29d411b9ff212cab480982e535e7aee21c1729b4bb592d681ab807","src/de/value.rs":"6dd878ce762799048c0ebc8f834932871e1bdf24953ea69415a2b2148e0d3dbc","src/error.rs":"da31d3881930f0e787d75191984f71fe2e1419d9331c68baa0fc0ce2d561766b","src/iter.rs":"30090fe6ab49bb1d8c7fec362cace52981b2c4e1a1a8e3fad4117eab558cdde6","src/lib.rs":"67f62df097e3b55a90a566af56d6e3c641f719300db8bfd5603ed5a2bff1aa8e","src/macros.rs":"e81e421815fac10d6a7bfb727bbe7b4f24e99b03cd8739efc806e4b704ac7b4e","src/ser/impls.rs":"36d372af1dae11444f85e497eefb98449bae70260348cdfb098c508439be7952","src/ser/mod.rs":"626e8ef5b1ddaf00fe84905e936046c40217e31609d5a56ca658f4eb23983fd5","src/utils.rs":"b0d1a54af90e3620abd66479d757a2eb442449788c4ece93161916da0838affa"},"package":"9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8"} \ No newline at end of file diff --git a/third_party/rust/serde-0.8.23/.cargo-ok b/third_party/rust/serde-0.8.23/.cargo-ok deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/third_party/rust/serde-0.8.23/Cargo.toml b/third_party/rust/serde-0.8.23/Cargo.toml deleted file mode 100644 index 91e37251b74a..000000000000 --- a/third_party/rust/serde-0.8.23/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "serde" -version = "0.8.23" -authors = ["Erick Tryzelaar "] -license = "MIT/Apache-2.0" -description = "A generic serialization/deserialization framework" -homepage = "https://serde.rs" -repository = "https://github.com/serde-rs/serde" -documentation = "https://docs.serde.rs/serde/" -readme = "../README.md" -keywords = ["serde", "serialization"] -categories = ["encoding"] -include = ["Cargo.toml", "src/**/*.rs"] - -[features] -default = ["std"] - -std = [] -unstable = [] -alloc = ["unstable"] -collections = ["alloc"] -unstable-testing = ["clippy", "unstable", "std"] - -[dependencies] -clippy = { version = "^0.*", optional = true } diff --git a/third_party/rust/serde-0.8.23/src/bytes.rs b/third_party/rust/serde-0.8.23/src/bytes.rs deleted file mode 100644 index 988c24a557d1..000000000000 --- a/third_party/rust/serde-0.8.23/src/bytes.rs +++ /dev/null @@ -1,252 +0,0 @@ -//! Helper module to enable serializing bytes more efficiently - -use core::{ops, fmt, char, iter, slice}; -use core::fmt::Write; - -use ser; - -#[cfg(any(feature = "std", feature = "collections"))] -pub use self::bytebuf::{ByteBuf, ByteBufVisitor}; - -#[cfg(feature = "collections")] -use collections::Vec; - -/////////////////////////////////////////////////////////////////////////////// - -/// `Bytes` wraps a `&[u8]` in order to serialize into a byte array. -#[derive(Clone, Copy, Eq, Hash, PartialEq, PartialOrd, Ord)] -pub struct Bytes<'a> { - bytes: &'a [u8], -} - -impl<'a> Bytes<'a> { - /// Wrap an existing `&[u8]`. - pub fn new(bytes: &'a [u8]) -> Self { - Bytes { - bytes: bytes, - } - } -} - -impl<'a> fmt::Debug for Bytes<'a> { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - try!(f.write_str("b\"")); - for c in escape_bytestring(self.bytes) { - try!(f.write_char(c)); - } - f.write_char('"') - } -} - -impl<'a> From<&'a [u8]> for Bytes<'a> { - fn from(bytes: &'a [u8]) -> Self { - Bytes::new(bytes) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a> From<&'a Vec> for Bytes<'a> { - fn from(bytes: &'a Vec) -> Self { - Bytes::new(bytes) - } -} - -impl<'a> Into<&'a [u8]> for Bytes<'a> { - fn into(self) -> &'a [u8] { - self.bytes - } -} - -impl<'a> ops::Deref for Bytes<'a> { - type Target = [u8]; - - fn deref(&self) -> &[u8] { self.bytes } -} - -impl<'a> ser::Serialize for Bytes<'a> { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: ser::Serializer - { - serializer.serialize_bytes(self.bytes) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "collections"))] -mod bytebuf { - use core::ops; - use core::fmt; - use core::fmt::Write; - - use ser; - use de; - - #[cfg(feature = "collections")] - use collections::{String, Vec}; - - /// `ByteBuf` wraps a `Vec` and serializes as a byte array. - #[derive(Clone, Default, Eq, Hash, PartialEq, PartialOrd, Ord)] - pub struct ByteBuf { - bytes: Vec, - } - - impl ByteBuf { - /// Construct a new, empty `ByteBuf`. - pub fn new() -> Self { - ByteBuf::from(Vec::new()) - } - - /// Construct a new, empty `ByteBuf` with the specified capacity. - pub fn with_capacity(cap: usize) -> Self { - ByteBuf::from(Vec::with_capacity(cap)) - } - - /// Wrap existing bytes in a `ByteBuf`. - pub fn from>>(bytes: T) -> Self { - ByteBuf { - bytes: bytes.into(), - } - } - } - - impl fmt::Debug for ByteBuf { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - try!(f.write_str("b\"")); - for c in super::escape_bytestring(self.bytes.as_ref()) { - try!(f.write_char(c)); - } - f.write_char('"') - } - } - - impl Into> for ByteBuf { - fn into(self) -> Vec { - self.bytes - } - } - - impl From> for ByteBuf { - fn from(bytes: Vec) -> Self { - ByteBuf::from(bytes) - } - } - - impl AsRef> for ByteBuf { - fn as_ref(&self) -> &Vec { - &self.bytes - } - } - - impl AsRef<[u8]> for ByteBuf { - fn as_ref(&self) -> &[u8] { - &self.bytes - } - } - - impl AsMut> for ByteBuf { - fn as_mut(&mut self) -> &mut Vec { - &mut self.bytes - } - } - - impl AsMut<[u8]> for ByteBuf { - fn as_mut(&mut self) -> &mut [u8] { - &mut self.bytes - } - } - - impl ops::Deref for ByteBuf { - type Target = [u8]; - - fn deref(&self) -> &[u8] { &self.bytes[..] } - } - - impl ops::DerefMut for ByteBuf { - fn deref_mut(&mut self) -> &mut [u8] { &mut self.bytes[..] } - } - - impl ser::Serialize for ByteBuf { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: ser::Serializer - { - serializer.serialize_bytes(self) - } - } - - /// This type implements the `serde::de::Visitor` trait for a `ByteBuf`. - pub struct ByteBufVisitor; - - impl de::Visitor for ByteBufVisitor { - type Value = ByteBuf; - - #[inline] - fn visit_unit(&mut self) -> Result - where E: de::Error, - { - Ok(ByteBuf::new()) - } - - #[inline] - fn visit_seq(&mut self, mut visitor: V) -> Result - where V: de::SeqVisitor, - { - let (len, _) = visitor.size_hint(); - let mut values = Vec::with_capacity(len); - - while let Some(value) = try!(visitor.visit()) { - values.push(value); - } - - try!(visitor.end()); - - Ok(ByteBuf::from(values)) - } - - #[inline] - fn visit_bytes(&mut self, v: &[u8]) -> Result - where E: de::Error, - { - Ok(ByteBuf::from(v)) - } - - #[inline] - fn visit_byte_buf(&mut self, v: Vec) -> Result - where E: de::Error, - { - Ok(ByteBuf::from(v)) - } - - fn visit_str(&mut self, v: &str) -> Result - where E: de::Error, - { - Ok(ByteBuf::from(v)) - } - - fn visit_string(&mut self, v: String) -> Result - where E: de::Error, - { - Ok(ByteBuf::from(v)) - } - } - - impl de::Deserialize for ByteBuf { - #[inline] - fn deserialize(deserializer: &mut D) -> Result - where D: de::Deserializer - { - deserializer.deserialize_bytes(ByteBufVisitor) - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[inline] -fn escape_bytestring<'a>(bytes: &'a [u8]) -> iter::FlatMap, char::EscapeDefault, fn(&u8) -> char::EscapeDefault> { - fn f(b: &u8) -> char::EscapeDefault { - char::from_u32(*b as u32).unwrap().escape_default() - } - bytes.iter().flat_map(f as fn(&u8) -> char::EscapeDefault) -} diff --git a/third_party/rust/serde-0.8.23/src/de/from_primitive.rs b/third_party/rust/serde-0.8.23/src/de/from_primitive.rs deleted file mode 100644 index 14e518605a13..000000000000 --- a/third_party/rust/serde-0.8.23/src/de/from_primitive.rs +++ /dev/null @@ -1,409 +0,0 @@ -// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// Extracted from https://github.com/rust-num/num. - -// Rust 1.5 is unhappy that this private module is undocumented. -#![allow(missing_docs)] - -use core::{usize, u8, u16, u32, u64}; -use core::{isize, i8, i16, i32, i64}; -use core::{f32, f64}; -use core::mem::size_of; - -/// Numbers which have upper and lower bounds -pub trait Bounded { - // FIXME (#5527): These should be associated constants - /// returns the smallest finite number this type can represent - fn min_value() -> Self; - /// returns the largest finite number this type can represent - fn max_value() -> Self; -} - -macro_rules! bounded_impl { - ($t:ty, $min:expr, $max:expr) => { - impl Bounded for $t { - #[inline] - fn min_value() -> $t { $min } - - #[inline] - fn max_value() -> $t { $max } - } - } -} - -bounded_impl!(usize, usize::MIN, usize::MAX); -bounded_impl!(u8, u8::MIN, u8::MAX); -bounded_impl!(u16, u16::MIN, u16::MAX); -bounded_impl!(u32, u32::MIN, u32::MAX); -bounded_impl!(u64, u64::MIN, u64::MAX); - -bounded_impl!(isize, isize::MIN, isize::MAX); -bounded_impl!(i8, i8::MIN, i8::MAX); -bounded_impl!(i16, i16::MIN, i16::MAX); -bounded_impl!(i32, i32::MIN, i32::MAX); -bounded_impl!(i64, i64::MIN, i64::MAX); - -bounded_impl!(f32, f32::MIN, f32::MAX); -bounded_impl!(f64, f64::MIN, f64::MAX); - -/// A generic trait for converting a value to a number. -pub trait ToPrimitive { - /// Converts the value of `self` to an `isize`. - #[inline] - fn to_isize(&self) -> Option { - self.to_i64().and_then(|x| x.to_isize()) - } - - /// Converts the value of `self` to an `i8`. - #[inline] - fn to_i8(&self) -> Option { - self.to_i64().and_then(|x| x.to_i8()) - } - - /// Converts the value of `self` to an `i16`. - #[inline] - fn to_i16(&self) -> Option { - self.to_i64().and_then(|x| x.to_i16()) - } - - /// Converts the value of `self` to an `i32`. - #[inline] - fn to_i32(&self) -> Option { - self.to_i64().and_then(|x| x.to_i32()) - } - - /// Converts the value of `self` to an `i64`. - fn to_i64(&self) -> Option; - - /// Converts the value of `self` to a `usize`. - #[inline] - fn to_usize(&self) -> Option { - self.to_u64().and_then(|x| x.to_usize()) - } - - /// Converts the value of `self` to an `u8`. - #[inline] - fn to_u8(&self) -> Option { - self.to_u64().and_then(|x| x.to_u8()) - } - - /// Converts the value of `self` to an `u16`. - #[inline] - fn to_u16(&self) -> Option { - self.to_u64().and_then(|x| x.to_u16()) - } - - /// Converts the value of `self` to an `u32`. - #[inline] - fn to_u32(&self) -> Option { - self.to_u64().and_then(|x| x.to_u32()) - } - - /// Converts the value of `self` to an `u64`. - #[inline] - fn to_u64(&self) -> Option; - - /// Converts the value of `self` to an `f32`. - #[inline] - fn to_f32(&self) -> Option { - self.to_f64().and_then(|x| x.to_f32()) - } - - /// Converts the value of `self` to an `f64`. - #[inline] - fn to_f64(&self) -> Option { - self.to_i64().and_then(|x| x.to_f64()) - } -} - -macro_rules! impl_to_primitive_int_to_int { - ($SrcT:ty, $DstT:ty, $slf:expr) => ( - { - if size_of::<$SrcT>() <= size_of::<$DstT>() { - Some($slf as $DstT) - } else { - let n = $slf as i64; - let min_value: $DstT = Bounded::min_value(); - let max_value: $DstT = Bounded::max_value(); - if min_value as i64 <= n && n <= max_value as i64 { - Some($slf as $DstT) - } else { - None - } - } - } - ) -} - -macro_rules! impl_to_primitive_int_to_uint { - ($SrcT:ty, $DstT:ty, $slf:expr) => ( - { - let zero: $SrcT = 0; - let max_value: $DstT = Bounded::max_value(); - if zero <= $slf && $slf as u64 <= max_value as u64 { - Some($slf as $DstT) - } else { - None - } - } - ) -} - -macro_rules! impl_to_primitive_int { - ($T:ty) => ( - impl ToPrimitive for $T { - #[inline] - fn to_isize(&self) -> Option { impl_to_primitive_int_to_int!($T, isize, *self) } - #[inline] - fn to_i8(&self) -> Option { impl_to_primitive_int_to_int!($T, i8, *self) } - #[inline] - fn to_i16(&self) -> Option { impl_to_primitive_int_to_int!($T, i16, *self) } - #[inline] - fn to_i32(&self) -> Option { impl_to_primitive_int_to_int!($T, i32, *self) } - #[inline] - fn to_i64(&self) -> Option { impl_to_primitive_int_to_int!($T, i64, *self) } - - #[inline] - fn to_usize(&self) -> Option { impl_to_primitive_int_to_uint!($T, usize, *self) } - #[inline] - fn to_u8(&self) -> Option { impl_to_primitive_int_to_uint!($T, u8, *self) } - #[inline] - fn to_u16(&self) -> Option { impl_to_primitive_int_to_uint!($T, u16, *self) } - #[inline] - fn to_u32(&self) -> Option { impl_to_primitive_int_to_uint!($T, u32, *self) } - #[inline] - fn to_u64(&self) -> Option { impl_to_primitive_int_to_uint!($T, u64, *self) } - - #[inline] - fn to_f32(&self) -> Option { Some(*self as f32) } - #[inline] - fn to_f64(&self) -> Option { Some(*self as f64) } - } - ) -} - -impl_to_primitive_int! { isize } -impl_to_primitive_int! { i8 } -impl_to_primitive_int! { i16 } -impl_to_primitive_int! { i32 } -impl_to_primitive_int! { i64 } - -macro_rules! impl_to_primitive_uint_to_int { - ($DstT:ty, $slf:expr) => ( - { - let max_value: $DstT = Bounded::max_value(); - if $slf as u64 <= max_value as u64 { - Some($slf as $DstT) - } else { - None - } - } - ) -} - -macro_rules! impl_to_primitive_uint_to_uint { - ($SrcT:ty, $DstT:ty, $slf:expr) => ( - { - if size_of::<$SrcT>() <= size_of::<$DstT>() { - Some($slf as $DstT) - } else { - let zero: $SrcT = 0; - let max_value: $DstT = Bounded::max_value(); - if zero <= $slf && $slf as u64 <= max_value as u64 { - Some($slf as $DstT) - } else { - None - } - } - } - ) -} - -macro_rules! impl_to_primitive_uint { - ($T:ty) => ( - impl ToPrimitive for $T { - #[inline] - fn to_isize(&self) -> Option { impl_to_primitive_uint_to_int!(isize, *self) } - #[inline] - fn to_i8(&self) -> Option { impl_to_primitive_uint_to_int!(i8, *self) } - #[inline] - fn to_i16(&self) -> Option { impl_to_primitive_uint_to_int!(i16, *self) } - #[inline] - fn to_i32(&self) -> Option { impl_to_primitive_uint_to_int!(i32, *self) } - #[inline] - fn to_i64(&self) -> Option { impl_to_primitive_uint_to_int!(i64, *self) } - - #[inline] - fn to_usize(&self) -> Option { - impl_to_primitive_uint_to_uint!($T, usize, *self) - } - #[inline] - fn to_u8(&self) -> Option { impl_to_primitive_uint_to_uint!($T, u8, *self) } - #[inline] - fn to_u16(&self) -> Option { impl_to_primitive_uint_to_uint!($T, u16, *self) } - #[inline] - fn to_u32(&self) -> Option { impl_to_primitive_uint_to_uint!($T, u32, *self) } - #[inline] - fn to_u64(&self) -> Option { impl_to_primitive_uint_to_uint!($T, u64, *self) } - - #[inline] - fn to_f32(&self) -> Option { Some(*self as f32) } - #[inline] - fn to_f64(&self) -> Option { Some(*self as f64) } - } - ) -} - -impl_to_primitive_uint! { usize } -impl_to_primitive_uint! { u8 } -impl_to_primitive_uint! { u16 } -impl_to_primitive_uint! { u32 } -impl_to_primitive_uint! { u64 } - -macro_rules! impl_to_primitive_float_to_float { - ($SrcT:ident, $DstT:ident, $slf:expr) => ( - if size_of::<$SrcT>() <= size_of::<$DstT>() { - Some($slf as $DstT) - } else { - let n = $slf as f64; - let max_value: $SrcT = ::core::$SrcT::MAX; - if -max_value as f64 <= n && n <= max_value as f64 { - Some($slf as $DstT) - } else { - None - } - } - ) -} - -macro_rules! impl_to_primitive_float { - ($T:ident) => ( - impl ToPrimitive for $T { - #[inline] - fn to_isize(&self) -> Option { Some(*self as isize) } - #[inline] - fn to_i8(&self) -> Option { Some(*self as i8) } - #[inline] - fn to_i16(&self) -> Option { Some(*self as i16) } - #[inline] - fn to_i32(&self) -> Option { Some(*self as i32) } - #[inline] - fn to_i64(&self) -> Option { Some(*self as i64) } - - #[inline] - fn to_usize(&self) -> Option { Some(*self as usize) } - #[inline] - fn to_u8(&self) -> Option { Some(*self as u8) } - #[inline] - fn to_u16(&self) -> Option { Some(*self as u16) } - #[inline] - fn to_u32(&self) -> Option { Some(*self as u32) } - #[inline] - fn to_u64(&self) -> Option { Some(*self as u64) } - - #[inline] - fn to_f32(&self) -> Option { impl_to_primitive_float_to_float!($T, f32, *self) } - #[inline] - fn to_f64(&self) -> Option { impl_to_primitive_float_to_float!($T, f64, *self) } - } - ) -} - -impl_to_primitive_float! { f32 } -impl_to_primitive_float! { f64 } - -pub trait FromPrimitive: Sized { - #[inline] - fn from_isize(n: isize) -> Option { - FromPrimitive::from_i64(n as i64) - } - - #[inline] - fn from_i8(n: i8) -> Option { - FromPrimitive::from_i64(n as i64) - } - - #[inline] - fn from_i16(n: i16) -> Option { - FromPrimitive::from_i64(n as i64) - } - - #[inline] - fn from_i32(n: i32) -> Option { - FromPrimitive::from_i64(n as i64) - } - - fn from_i64(n: i64) -> Option; - - #[inline] - fn from_usize(n: usize) -> Option { - FromPrimitive::from_u64(n as u64) - } - - #[inline] - fn from_u8(n: u8) -> Option { - FromPrimitive::from_u64(n as u64) - } - - #[inline] - fn from_u16(n: u16) -> Option { - FromPrimitive::from_u64(n as u64) - } - - #[inline] - fn from_u32(n: u32) -> Option { - FromPrimitive::from_u64(n as u64) - } - - fn from_u64(n: u64) -> Option; - - #[inline] - fn from_f32(n: f32) -> Option { - FromPrimitive::from_f64(n as f64) - } - - #[inline] - fn from_f64(n: f64) -> Option { - FromPrimitive::from_i64(n as i64) - } -} - -macro_rules! impl_from_primitive { - ($T:ty, $to_ty:ident) => ( - impl FromPrimitive for $T { - #[inline] fn from_i8(n: i8) -> Option<$T> { n.$to_ty() } - #[inline] fn from_i16(n: i16) -> Option<$T> { n.$to_ty() } - #[inline] fn from_i32(n: i32) -> Option<$T> { n.$to_ty() } - #[inline] fn from_i64(n: i64) -> Option<$T> { n.$to_ty() } - - #[inline] fn from_u8(n: u8) -> Option<$T> { n.$to_ty() } - #[inline] fn from_u16(n: u16) -> Option<$T> { n.$to_ty() } - #[inline] fn from_u32(n: u32) -> Option<$T> { n.$to_ty() } - #[inline] fn from_u64(n: u64) -> Option<$T> { n.$to_ty() } - - #[inline] fn from_f32(n: f32) -> Option<$T> { n.$to_ty() } - #[inline] fn from_f64(n: f64) -> Option<$T> { n.$to_ty() } - } - ) -} - -impl_from_primitive! { isize, to_isize } -impl_from_primitive! { i8, to_i8 } -impl_from_primitive! { i16, to_i16 } -impl_from_primitive! { i32, to_i32 } -impl_from_primitive! { i64, to_i64 } -impl_from_primitive! { usize, to_usize } -impl_from_primitive! { u8, to_u8 } -impl_from_primitive! { u16, to_u16 } -impl_from_primitive! { u32, to_u32 } -impl_from_primitive! { u64, to_u64 } -impl_from_primitive! { f32, to_f32 } -impl_from_primitive! { f64, to_f64 } diff --git a/third_party/rust/serde-0.8.23/src/de/impls.rs b/third_party/rust/serde-0.8.23/src/de/impls.rs deleted file mode 100644 index 8cad930a3cd5..000000000000 --- a/third_party/rust/serde-0.8.23/src/de/impls.rs +++ /dev/null @@ -1,1306 +0,0 @@ -//! This module contains `Deserialize` and `Visitor` implementations. - -#[cfg(feature = "std")] -use std::borrow::Cow; -#[cfg(all(feature = "unstable", feature = "collections", not(feature = "std")))] -use collections::borrow::Cow; - -#[cfg(all(feature = "collections", not(feature = "std")))] -use collections::{ - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - VecDeque, - Vec, - String, -}; - -#[cfg(feature = "std")] -use std::collections::{ - HashMap, - HashSet, - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - VecDeque, -}; - -#[cfg(all(feature = "unstable", feature = "collections"))] -use collections::enum_set::{CLike, EnumSet}; -#[cfg(all(feature = "unstable", feature = "collections"))] -use collections::borrow::ToOwned; - -use core::hash::{Hash, BuildHasher}; -use core::marker::PhantomData; -#[cfg(feature = "std")] -use std::net; -#[cfg(feature = "std")] -use std::path; -use core::str; - -#[cfg(feature = "std")] -use std::rc::Rc; -#[cfg(all(feature = "unstable", feature = "alloc", not(feature = "std")))] -use alloc::rc::Rc; - -#[cfg(feature = "std")] -use std::sync::Arc; -#[cfg(all(feature = "unstable", feature = "alloc", not(feature = "std")))] -use alloc::arc::Arc; - -#[cfg(all(feature = "unstable", feature = "alloc", not(feature = "std")))] -use alloc::boxed::Box; - -#[cfg(feature = "std")] -use std::time::Duration; - -#[cfg(feature = "unstable")] -use core::nonzero::{NonZero, Zeroable}; - -#[cfg(feature = "unstable")] -use core::num::Zero; - -use de::{ - Deserialize, - Deserializer, - EnumVisitor, - Error, - MapVisitor, - SeqVisitor, - Type, - VariantVisitor, - Visitor, -}; -use de::from_primitive::FromPrimitive; - -/////////////////////////////////////////////////////////////////////////////// - -/// A visitor that produces a `()`. -pub struct UnitVisitor; - -impl Visitor for UnitVisitor { - type Value = (); - - fn visit_unit(&mut self) -> Result<(), E> - where E: Error, - { - Ok(()) - } - - fn visit_seq(&mut self, mut visitor: V) -> Result<(), V::Error> - where V: SeqVisitor, - { - visitor.end() - } -} - -impl Deserialize for () { - fn deserialize(deserializer: &mut D) -> Result<(), D::Error> - where D: Deserializer, - { - deserializer.deserialize_unit(UnitVisitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A visitor that produces a `bool`. -pub struct BoolVisitor; - -impl Visitor for BoolVisitor { - type Value = bool; - - fn visit_bool(&mut self, v: bool) -> Result - where E: Error, - { - Ok(v) - } - - fn visit_str(&mut self, s: &str) -> Result - where E: Error, - { - match s.trim_matches(::utils::Pattern_White_Space) { - "true" => Ok(true), - "false" => Ok(false), - _ => Err(Error::invalid_type(Type::Bool)), - } - } -} - -impl Deserialize for bool { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - deserializer.deserialize_bool(BoolVisitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! impl_deserialize_num_method { - ($src_ty:ty, $method:ident, $from_method:ident, $ty:expr) => { - #[inline] - fn $method(&mut self, v: $src_ty) -> Result - where E: Error, - { - match FromPrimitive::$from_method(v) { - Some(v) => Ok(v), - None => Err(Error::invalid_type($ty)), - } - } - } -} - -/// A visitor that produces a primitive type. -struct PrimitiveVisitor { - marker: PhantomData, -} - -impl PrimitiveVisitor { - /// Construct a new `PrimitiveVisitor`. - #[inline] - fn new() -> Self { - PrimitiveVisitor { - marker: PhantomData, - } - } -} - -impl Visitor for PrimitiveVisitor - where T: Deserialize + FromPrimitive + str::FromStr -{ - type Value = T; - - impl_deserialize_num_method!(isize, visit_isize, from_isize, Type::Isize); - impl_deserialize_num_method!(i8, visit_i8, from_i8, Type::I8); - impl_deserialize_num_method!(i16, visit_i16, from_i16, Type::I16); - impl_deserialize_num_method!(i32, visit_i32, from_i32, Type::I32); - impl_deserialize_num_method!(i64, visit_i64, from_i64, Type::I64); - impl_deserialize_num_method!(usize, visit_usize, from_usize, Type::Usize); - impl_deserialize_num_method!(u8, visit_u8, from_u8, Type::U8); - impl_deserialize_num_method!(u16, visit_u16, from_u16, Type::U16); - impl_deserialize_num_method!(u32, visit_u32, from_u32, Type::U32); - impl_deserialize_num_method!(u64, visit_u64, from_u64, Type::U64); - impl_deserialize_num_method!(f32, visit_f32, from_f32, Type::F32); - impl_deserialize_num_method!(f64, visit_f64, from_f64, Type::F64); - - #[inline] - fn visit_str(&mut self, s: &str) -> Result - where E: Error, - { - str::FromStr::from_str(s.trim_matches(::utils::Pattern_White_Space)).or_else(|_| { - Err(Error::invalid_type(Type::Str)) - }) - } -} - -macro_rules! impl_deserialize_num { - ($ty:ty, $method:ident) => { - impl Deserialize for $ty { - #[inline] - fn deserialize(deserializer: &mut D) -> Result<$ty, D::Error> - where D: Deserializer, - { - deserializer.$method(PrimitiveVisitor::new()) - } - } - } -} - -impl_deserialize_num!(isize, deserialize_isize); -impl_deserialize_num!(i8, deserialize_i8); -impl_deserialize_num!(i16, deserialize_i16); -impl_deserialize_num!(i32, deserialize_i32); -impl_deserialize_num!(i64, deserialize_i64); -impl_deserialize_num!(usize, deserialize_usize); -impl_deserialize_num!(u8, deserialize_u8); -impl_deserialize_num!(u16, deserialize_u16); -impl_deserialize_num!(u32, deserialize_u32); -impl_deserialize_num!(u64, deserialize_u64); -impl_deserialize_num!(f32, deserialize_f32); -impl_deserialize_num!(f64, deserialize_f64); - -/////////////////////////////////////////////////////////////////////////////// - -struct CharVisitor; - -impl Visitor for CharVisitor { - type Value = char; - - #[inline] - fn visit_char(&mut self, v: char) -> Result - where E: Error, - { - Ok(v) - } - - #[inline] - fn visit_str(&mut self, v: &str) -> Result - where E: Error, - { - let mut iter = v.chars(); - if let Some(v) = iter.next() { - if iter.next().is_some() { - Err(Error::invalid_type(Type::Char)) - } else { - Ok(v) - } - } else { - Err(Error::end_of_stream()) - } - } -} - -impl Deserialize for char { - #[inline] - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - deserializer.deserialize_char(CharVisitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "collections"))] -struct StringVisitor; - -#[cfg(any(feature = "std", feature = "collections"))] -impl Visitor for StringVisitor { - type Value = String; - - fn visit_str(&mut self, v: &str) -> Result - where E: Error, - { - Ok(v.to_owned()) - } - - fn visit_string(&mut self, v: String) -> Result - where E: Error, - { - Ok(v) - } - - fn visit_unit(&mut self) -> Result - where E: Error, - { - Ok(String::new()) - } - - fn visit_bytes(&mut self, v: &[u8]) -> Result - where E: Error, - { - match str::from_utf8(v) { - Ok(s) => Ok(s.to_owned()), - Err(_) => Err(Error::invalid_type(Type::String)), - } - } - - fn visit_byte_buf(&mut self, v: Vec) -> Result - where E: Error, - { - match String::from_utf8(v) { - Ok(s) => Ok(s), - Err(_) => Err(Error::invalid_type(Type::String)), - } - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Deserialize for String { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - deserializer.deserialize_string(StringVisitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -struct OptionVisitor { - marker: PhantomData, -} - -impl< - T: Deserialize, -> Visitor for OptionVisitor { - type Value = Option; - - #[inline] - fn visit_unit(&mut self) -> Result, E> - where E: Error, - { - Ok(None) - } - - #[inline] - fn visit_none(&mut self) -> Result, E> - where E: Error, - { - Ok(None) - } - - #[inline] - fn visit_some(&mut self, deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - Ok(Some(try!(Deserialize::deserialize(deserializer)))) - } -} - -impl Deserialize for Option where T: Deserialize { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - deserializer.deserialize_option(OptionVisitor { marker: PhantomData }) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A visitor that produces a `PhantomData`. -pub struct PhantomDataVisitor { - marker: PhantomData, -} - -impl Visitor for PhantomDataVisitor { - type Value = PhantomData; - - #[inline] - fn visit_unit(&mut self) -> Result, E> - where E: Error, - { - Ok(PhantomData) - } -} - -impl Deserialize for PhantomData { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - let visitor = PhantomDataVisitor { marker: PhantomData }; - deserializer.deserialize_unit_struct("PhantomData", visitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! seq_impl { - ( - $ty:ty, - $visitor_ty:ident < $($typaram:ident : $bound1:ident $(+ $bound2:ident)*),* >, - $visitor:ident, - $ctor:expr, - $with_capacity:expr, - $insert:expr - ) => { - /// A visitor that produces a sequence. - pub struct $visitor_ty<$($typaram),*> { - marker: PhantomData<$ty>, - } - - impl<$($typaram),*> $visitor_ty<$($typaram),*> - where $($typaram: $bound1 $(+ $bound2)*),* - { - /// Construct a new sequence visitor. - pub fn new() -> Self { - $visitor_ty { - marker: PhantomData, - } - } - } - - impl<$($typaram),*> Visitor for $visitor_ty<$($typaram),*> - where $($typaram: $bound1 $(+ $bound2)*),* - { - type Value = $ty; - - #[inline] - fn visit_unit(&mut self) -> Result<$ty, E> - where E: Error, - { - Ok($ctor) - } - - #[inline] - fn visit_seq(&mut self, mut $visitor: V) -> Result<$ty, V::Error> - where V: SeqVisitor, - { - let mut values = $with_capacity; - - while let Some(value) = try!($visitor.visit()) { - $insert(&mut values, value); - } - - try!($visitor.end()); - - Ok(values) - } - } - - impl<$($typaram),*> Deserialize for $ty - where $($typaram: $bound1 $(+ $bound2)*),* - { - fn deserialize(deserializer: &mut D) -> Result<$ty, D::Error> - where D: Deserializer, - { - deserializer.deserialize_seq($visitor_ty::new()) - } - } - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -seq_impl!( - BinaryHeap, - BinaryHeapVisitor, - visitor, - BinaryHeap::new(), - BinaryHeap::with_capacity(visitor.size_hint().0), - BinaryHeap::push); - -#[cfg(any(feature = "std", feature = "collections"))] -seq_impl!( - BTreeSet, - BTreeSetVisitor, - visitor, - BTreeSet::new(), - BTreeSet::new(), - BTreeSet::insert); - -#[cfg(all(feature = "unstable", feature = "collections"))] -seq_impl!( - EnumSet, - EnumSetVisitor, - visitor, - EnumSet::new(), - EnumSet::new(), - EnumSet::insert); - -#[cfg(any(feature = "std", feature = "collections"))] -seq_impl!( - LinkedList, - LinkedListVisitor, - visitor, - LinkedList::new(), - LinkedList::new(), - LinkedList::push_back); - -#[cfg(feature = "std")] -seq_impl!( - HashSet, - HashSetVisitor, - visitor, - HashSet::with_hasher(S::default()), - HashSet::with_capacity_and_hasher(visitor.size_hint().0, S::default()), - HashSet::insert); - -#[cfg(any(feature = "std", feature = "collections"))] -seq_impl!( - Vec, - VecVisitor, - visitor, - Vec::new(), - Vec::with_capacity(visitor.size_hint().0), - Vec::push); - -#[cfg(any(feature = "std", feature = "collections"))] -seq_impl!( - VecDeque, - VecDequeVisitor, - visitor, - VecDeque::new(), - VecDeque::with_capacity(visitor.size_hint().0), - VecDeque::push_back); - -/////////////////////////////////////////////////////////////////////////////// - -struct ArrayVisitor { - marker: PhantomData, -} - -impl ArrayVisitor { - pub fn new() -> Self { - ArrayVisitor { - marker: PhantomData, - } - } -} - -impl Visitor for ArrayVisitor<[T; 0]> where T: Deserialize { - type Value = [T; 0]; - - #[inline] - fn visit_unit(&mut self) -> Result<[T; 0], E> - where E: Error, - { - Ok([]) - } - - #[inline] - fn visit_seq(&mut self, mut visitor: V) -> Result<[T; 0], V::Error> - where V: SeqVisitor, - { - try!(visitor.end()); - Ok([]) - } -} - -impl Deserialize for [T; 0] - where T: Deserialize -{ - fn deserialize(deserializer: &mut D) -> Result<[T; 0], D::Error> - where D: Deserializer, - { - deserializer.deserialize_seq_fixed_size(0, ArrayVisitor::<[T; 0]>::new()) - } -} - -macro_rules! array_impls { - ($($len:expr => ($($name:ident)+))+) => { - $( - impl Visitor for ArrayVisitor<[T; $len]> where T: Deserialize { - type Value = [T; $len]; - - #[inline] - fn visit_seq(&mut self, mut visitor: V) -> Result<[T; $len], V::Error> - where V: SeqVisitor, - { - $( - let $name = match try!(visitor.visit()) { - Some(val) => val, - None => return Err(Error::end_of_stream()), - }; - )+ - - try!(visitor.end()); - - Ok([$($name),+]) - } - } - - impl Deserialize for [T; $len] - where T: Deserialize, - { - fn deserialize(deserializer: &mut D) -> Result<[T; $len], D::Error> - where D: Deserializer, - { - deserializer.deserialize_seq_fixed_size($len, ArrayVisitor::<[T; $len]>::new()) - } - } - )+ - } -} - -array_impls! { - 1 => (a) - 2 => (a b) - 3 => (a b c) - 4 => (a b c d) - 5 => (a b c d e) - 6 => (a b c d e f) - 7 => (a b c d e f g) - 8 => (a b c d e f g h) - 9 => (a b c d e f g h i) - 10 => (a b c d e f g h i j) - 11 => (a b c d e f g h i j k) - 12 => (a b c d e f g h i j k l) - 13 => (a b c d e f g h i j k l m) - 14 => (a b c d e f g h i j k l m n) - 15 => (a b c d e f g h i j k l m n o) - 16 => (a b c d e f g h i j k l m n o p) - 17 => (a b c d e f g h i j k l m n o p q) - 18 => (a b c d e f g h i j k l m n o p q r) - 19 => (a b c d e f g h i j k l m n o p q r s) - 20 => (a b c d e f g h i j k l m n o p q r s t) - 21 => (a b c d e f g h i j k l m n o p q r s t u) - 22 => (a b c d e f g h i j k l m n o p q r s t u v) - 23 => (a b c d e f g h i j k l m n o p q r s t u v w) - 24 => (a b c d e f g h i j k l m n o p q r s t u v w x) - 25 => (a b c d e f g h i j k l m n o p q r s t u v w x y) - 26 => (a b c d e f g h i j k l m n o p q r s t u v w x y z) - 27 => (a b c d e f g h i j k l m n o p q r s t u v w x y z aa) - 28 => (a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab) - 29 => (a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac) - 30 => (a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad) - 31 => (a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae) - 32 => (a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af) -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! tuple_impls { - ($($len:expr => $visitor:ident => ($($name:ident)+))+) => { - $( - /// Construct a tuple visitor. - pub struct $visitor<$($name,)+> { - marker: PhantomData<($($name,)+)>, - } - - impl<$($name: Deserialize,)+> $visitor<$($name,)+> { - /// Construct a `TupleVisitor*`. - pub fn new() -> Self { - $visitor { marker: PhantomData } - } - } - - impl<$($name: Deserialize),+> Visitor for $visitor<$($name,)+> { - type Value = ($($name,)+); - - #[inline] - #[allow(non_snake_case)] - fn visit_seq(&mut self, mut visitor: V) -> Result<($($name,)+), V::Error> - where V: SeqVisitor, - { - $( - let $name = match try!(visitor.visit()) { - Some(value) => value, - None => return Err(Error::end_of_stream()), - }; - )+ - - try!(visitor.end()); - - Ok(($($name,)+)) - } - } - - impl<$($name: Deserialize),+> Deserialize for ($($name,)+) { - #[inline] - fn deserialize(deserializer: &mut D) -> Result<($($name,)+), D::Error> - where D: Deserializer, - { - deserializer.deserialize_tuple($len, $visitor::new()) - } - } - )+ - } -} - -tuple_impls! { - 1 => TupleVisitor1 => (T0) - 2 => TupleVisitor2 => (T0 T1) - 3 => TupleVisitor3 => (T0 T1 T2) - 4 => TupleVisitor4 => (T0 T1 T2 T3) - 5 => TupleVisitor5 => (T0 T1 T2 T3 T4) - 6 => TupleVisitor6 => (T0 T1 T2 T3 T4 T5) - 7 => TupleVisitor7 => (T0 T1 T2 T3 T4 T5 T6) - 8 => TupleVisitor8 => (T0 T1 T2 T3 T4 T5 T6 T7) - 9 => TupleVisitor9 => (T0 T1 T2 T3 T4 T5 T6 T7 T8) - 10 => TupleVisitor10 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9) - 11 => TupleVisitor11 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10) - 12 => TupleVisitor12 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11) - 13 => TupleVisitor13 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12) - 14 => TupleVisitor14 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13) - 15 => TupleVisitor15 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14) - 16 => TupleVisitor16 => (T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15) -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! map_impl { - ( - $ty:ty, - $visitor_ty:ident < $($typaram:ident : $bound1:ident $(+ $bound2:ident)*),* >, - $visitor:ident, - $ctor:expr, - $with_capacity:expr - ) => { - /// A visitor that produces a map. - pub struct $visitor_ty<$($typaram),*> { - marker: PhantomData<$ty>, - } - - impl<$($typaram),*> $visitor_ty<$($typaram),*> - where $($typaram: $bound1 $(+ $bound2)*),* - { - /// Construct a `MapVisitor*`. - pub fn new() -> Self { - $visitor_ty { - marker: PhantomData, - } - } - } - - impl<$($typaram),*> Visitor for $visitor_ty<$($typaram),*> - where $($typaram: $bound1 $(+ $bound2)*),* - { - type Value = $ty; - - #[inline] - fn visit_unit(&mut self) -> Result<$ty, E> - where E: Error, - { - Ok($ctor) - } - - #[inline] - fn visit_map(&mut self, mut $visitor: Visitor) -> Result<$ty, Visitor::Error> - where Visitor: MapVisitor, - { - let mut values = $with_capacity; - - while let Some((key, value)) = try!($visitor.visit()) { - values.insert(key, value); - } - - try!($visitor.end()); - - Ok(values) - } - } - - impl<$($typaram),*> Deserialize for $ty - where $($typaram: $bound1 $(+ $bound2)*),* - { - fn deserialize(deserializer: &mut D) -> Result<$ty, D::Error> - where D: Deserializer, - { - deserializer.deserialize_map($visitor_ty::new()) - } - } - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -map_impl!( - BTreeMap, - BTreeMapVisitor, - visitor, - BTreeMap::new(), - BTreeMap::new()); - -#[cfg(feature = "std")] -map_impl!( - HashMap, - HashMapVisitor, - visitor, - HashMap::with_hasher(S::default()), - HashMap::with_capacity_and_hasher(visitor.size_hint().0, S::default())); - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -impl Deserialize for net::IpAddr { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - let s = try!(String::deserialize(deserializer)); - match s.parse() { - Ok(s) => Ok(s), - Err(err) => Err(D::Error::invalid_value(&err.to_string())), - } - } -} - -#[cfg(feature = "std")] -impl Deserialize for net::Ipv4Addr { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - let s = try!(String::deserialize(deserializer)); - match s.parse() { - Ok(s) => Ok(s), - Err(err) => Err(D::Error::invalid_value(&err.to_string())), - } - } -} - -#[cfg(feature = "std")] -impl Deserialize for net::Ipv6Addr { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - let s = try!(String::deserialize(deserializer)); - match s.parse() { - Ok(s) => Ok(s), - Err(err) => Err(D::Error::invalid_value(&err.to_string())), - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -impl Deserialize for net::SocketAddr { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - let s = try!(String::deserialize(deserializer)); - match s.parse() { - Ok(s) => Ok(s), - Err(err) => Err(D::Error::invalid_value(&err.to_string())), - } - } -} - -#[cfg(feature = "std")] -impl Deserialize for net::SocketAddrV4 { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - let s = try!(String::deserialize(deserializer)); - match s.parse() { - Ok(s) => Ok(s), - Err(err) => Err(D::Error::invalid_value(&err.to_string())), - } - } -} - -#[cfg(feature = "std")] -impl Deserialize for net::SocketAddrV6 { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - let s = try!(String::deserialize(deserializer)); - match s.parse() { - Ok(s) => Ok(s), - Err(err) => Err(D::Error::invalid_value(&err.to_string())), - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -struct PathBufVisitor; - -#[cfg(feature = "std")] -impl Visitor for PathBufVisitor { - type Value = path::PathBuf; - - fn visit_str(&mut self, v: &str) -> Result - where E: Error, - { - Ok(From::from(v)) - } - - fn visit_string(&mut self, v: String) -> Result - where E: Error, - { - self.visit_str(&v) - } -} - -#[cfg(feature = "std")] -impl Deserialize for path::PathBuf { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - deserializer.deserialize_string(PathBufVisitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "alloc"))] -impl Deserialize for Box { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - let val = try!(Deserialize::deserialize(deserializer)); - Ok(Box::new(val)) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Deserialize for Box<[T]> { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - let v: Vec = try!(Deserialize::deserialize(deserializer)); - Ok(v.into_boxed_slice()) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Deserialize for Box { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer - { - let s = try!(String::deserialize(deserializer)); - Ok(s.into_boxed_str()) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl Deserialize for Arc { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - let val = try!(Deserialize::deserialize(deserializer)); - Ok(Arc::new(val)) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl Deserialize for Rc { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - let val = try!(Deserialize::deserialize(deserializer)); - Ok(Rc::new(val)) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a, T: ?Sized> Deserialize for Cow<'a, T> where T: ToOwned, T::Owned: Deserialize, { - #[inline] - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer, - { - let val = try!(Deserialize::deserialize(deserializer)); - Ok(Cow::Owned(val)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -// This is a cleaned-up version of the impl generated by: -// -// #[derive(Deserialize)] -// #[serde(deny_unknown_fields)] -// struct Duration { -// secs: u64, -// nanos: u32, -// } -#[cfg(feature = "std")] -impl Deserialize for Duration { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - enum Field { Secs, Nanos }; - - impl Deserialize for Field { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - struct FieldVisitor; - - impl Visitor for FieldVisitor { - type Value = Field; - - fn visit_usize(&mut self, value: usize) -> Result - where E: Error, - { - match value { - 0usize => Ok(Field::Secs), - 1usize => Ok(Field::Nanos), - _ => Err(Error::invalid_value("expected a field")), - } - } - - fn visit_str(&mut self, value: &str) -> Result - where E: Error, - { - match value { - "secs" => Ok(Field::Secs), - "nanos" => Ok(Field::Nanos), - _ => Err(Error::unknown_field(value)), - } - } - - fn visit_bytes(&mut self, value: &[u8]) -> Result - where E: Error, - { - match value { - b"secs" => Ok(Field::Secs), - b"nanos" => Ok(Field::Nanos), - _ => { - let value = String::from_utf8_lossy(value); - Err(Error::unknown_field(&value)) - } - } - } - } - - deserializer.deserialize_struct_field(FieldVisitor) - } - } - - struct DurationVisitor; - - impl Visitor for DurationVisitor { - type Value = Duration; - - fn visit_seq(&mut self, mut visitor: V) -> Result - where V: SeqVisitor, - { - let secs: u64 = match try!(visitor.visit()) { - Some(value) => value, - None => { - try!(visitor.end()); - return Err(Error::invalid_length(0)); - } - }; - let nanos: u32 = match try!(visitor.visit()) { - Some(value) => value, - None => { - try!(visitor.end()); - return Err(Error::invalid_length(1)); - } - }; - try!(visitor.end()); - Ok(Duration::new(secs, nanos)) - } - - fn visit_map(&mut self, mut visitor: V) -> Result - where V: MapVisitor, - { - let mut secs: Option = None; - let mut nanos: Option = None; - while let Some(key) = try!(visitor.visit_key::()) { - match key { - Field::Secs => { - if secs.is_some() { - return Err(::duplicate_field("secs")); - } - secs = Some(try!(visitor.visit_value())); - } - Field::Nanos => { - if nanos.is_some() { - return Err(::duplicate_field("nanos")); - } - nanos = Some(try!(visitor.visit_value())); - } - } - } - try!(visitor.end()); - let secs = match secs { - Some(secs) => secs, - None => try!(visitor.missing_field("secs")), - }; - let nanos = match nanos { - Some(nanos) => nanos, - None => try!(visitor.missing_field("nanos")), - }; - Ok(Duration::new(secs, nanos)) - } - } - - const FIELDS: &'static [&'static str] = &["secs", "nanos"]; - deserializer.deserialize_struct("Duration", FIELDS, DurationVisitor) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "unstable")] -impl Deserialize for NonZero where T: Deserialize + PartialEq + Zeroable + Zero { - fn deserialize(deserializer: &mut D) -> Result, D::Error> where D: Deserializer { - let value = try!(Deserialize::deserialize(deserializer)); - if value == Zero::zero() { - return Err(Error::invalid_value("expected a non-zero value")) - } - unsafe { - Ok(NonZero::new(value)) - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - - -impl Deserialize for Result where T: Deserialize, E: Deserialize { - fn deserialize(deserializer: &mut D) -> Result, D::Error> - where D: Deserializer { - enum Field { - Ok, - Err, - } - - impl Deserialize for Field { - #[inline] - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer - { - struct FieldVisitor; - - impl ::de::Visitor for FieldVisitor { - type Value = Field; - - #[cfg(any(feature = "std", feature = "collections"))] - fn visit_usize(&mut self, value: usize) -> Result where E: Error { - #[cfg(feature = "collections")] - use collections::string::ToString; - match value { - 0 => Ok(Field::Ok), - 1 => Ok(Field::Err), - _ => Err(Error::unknown_field(&value.to_string())), - } - } - - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn visit_usize(&mut self, value: usize) -> Result where E: Error { - match value { - 0 => Ok(Field::Ok), - 1 => Ok(Field::Err), - _ => Err(Error::unknown_field("some number")), - } - } - - fn visit_str(&mut self, value: &str) -> Result where E: Error { - match value { - "Ok" => Ok(Field::Ok), - "Err" => Ok(Field::Err), - _ => Err(Error::unknown_field(value)), - } - } - - fn visit_bytes(&mut self, value: &[u8]) -> Result where E: Error { - match value { - b"Ok" => Ok(Field::Ok), - b"Err" => Ok(Field::Err), - _ => { - match str::from_utf8(value) { - Ok(value) => Err(Error::unknown_field(value)), - Err(_) => Err(Error::invalid_type(Type::String)), - } - } - } - } - } - - deserializer.deserialize(FieldVisitor) - } - } - - struct Visitor(PhantomData>); - - impl EnumVisitor for Visitor - where T: Deserialize, - E: Deserialize - { - type Value = Result; - - fn visit(&mut self, mut visitor: V) -> Result, V::Error> - where V: VariantVisitor - { - match try!(visitor.visit_variant()) { - Field::Ok => { - let value = try!(visitor.visit_newtype()); - Ok(Ok(value)) - } - Field::Err => { - let value = try!(visitor.visit_newtype()); - Ok(Err(value)) - } - } - } - } - - const VARIANTS: &'static [&'static str] = &["Ok", "Err"]; - - deserializer.deserialize_enum("Result", VARIANTS, Visitor(PhantomData)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A target for deserializers that want to ignore data. Implements -/// Deserialize and silently eats data given to it. -pub struct IgnoredAny; - -impl Deserialize for IgnoredAny { - #[inline] - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - struct IgnoredAnyVisitor; - - impl Visitor for IgnoredAnyVisitor { - type Value = IgnoredAny; - - #[inline] - fn visit_bool(&mut self, _: bool) -> Result { - Ok(IgnoredAny) - } - - #[inline] - fn visit_i64(&mut self, _: i64) -> Result { - Ok(IgnoredAny) - } - - #[inline] - fn visit_u64(&mut self, _: u64) -> Result { - Ok(IgnoredAny) - } - - #[inline] - fn visit_f64(&mut self, _: f64) -> Result { - Ok(IgnoredAny) - } - - #[inline] - fn visit_str(&mut self, _: &str) -> Result - where E: Error, - { - Ok(IgnoredAny) - } - - #[inline] - fn visit_none(&mut self) -> Result { - Ok(IgnoredAny) - } - - #[inline] - fn visit_some(&mut self, _: &mut D) -> Result - where D: Deserializer, - { - Ok(IgnoredAny) - } - - #[inline] - fn visit_newtype_struct(&mut self, _: &mut D) -> Result - where D: Deserializer, - { - Ok(IgnoredAny) - } - - #[inline] - fn visit_unit(&mut self) -> Result { - Ok(IgnoredAny) - } - - #[inline] - fn visit_seq(&mut self, mut visitor: V) -> Result - where V: SeqVisitor, - { - while let Some(_) = try!(visitor.visit::()) { - // Gobble - } - - try!(visitor.end()); - Ok(IgnoredAny) - } - - #[inline] - fn visit_map(&mut self, mut visitor: V) -> Result - where V: MapVisitor, - { - while let Some((_, _)) = try!(visitor.visit::()) { - // Gobble - } - - try!(visitor.end()); - Ok(IgnoredAny) - } - - #[inline] - fn visit_bytes(&mut self, _: &[u8]) -> Result - where E: Error, - { - Ok(IgnoredAny) - } - } - - // TODO maybe not necessary with impl specialization - deserializer.deserialize_ignored_any(IgnoredAnyVisitor) - } -} diff --git a/third_party/rust/serde-0.8.23/src/de/mod.rs b/third_party/rust/serde-0.8.23/src/de/mod.rs deleted file mode 100644 index 210b36b03b45..000000000000 --- a/third_party/rust/serde-0.8.23/src/de/mod.rs +++ /dev/null @@ -1,830 +0,0 @@ -//! Generic deserialization framework. - -#[cfg(feature = "std")] -use std::error; -#[cfg(not(feature = "std"))] -use error; - -#[cfg(all(not(feature = "std"), feature = "collections"))] -use collections::{String, Vec}; - -use core::fmt; - -/////////////////////////////////////////////////////////////////////////////// - -pub mod impls; -pub mod value; -mod from_primitive; - -/////////////////////////////////////////////////////////////////////////////// - -/// `Error` is a trait that allows a `Deserialize` to generically create a -/// `Deserializer` error. -pub trait Error: Sized + error::Error { - /// Raised when there is general error when deserializing a type. - #[cfg(any(feature = "std", feature = "collections"))] - fn custom>(msg: T) -> Self; - - /// Raised when there is general error when deserializing a type. - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn custom>(msg: T) -> Self; - - /// Raised when a `Deserialize` type unexpectedly hit the end of the stream. - fn end_of_stream() -> Self; - - /// Raised when a `Deserialize` was passed an incorrect type. - fn invalid_type(ty: Type) -> Self { - Error::custom(format!("Invalid type. Expected `{:?}`", ty)) - } - - /// Raised when a `Deserialize` was passed an incorrect value. - fn invalid_value(msg: &str) -> Self { - Error::custom(format!("Invalid value: {}", msg)) - } - - /// Raised when a fixed sized sequence or map was passed in the wrong amount of arguments. - /// - /// The parameter `len` is the number of arguments found in the serialization. The sequence - /// may either expect more arguments or less arguments. - fn invalid_length(len: usize) -> Self { - Error::custom(format!("Invalid length: {}", len)) - } - - /// Raised when a `Deserialize` enum type received an unexpected variant. - fn unknown_variant(field: &str) -> Self { - Error::custom(format!("Unknown variant `{}`", field)) - } - - /// Raised when a `Deserialize` struct type received an unexpected struct field. - fn unknown_field(field: &str) -> Self { - Error::custom(format!("Unknown field `{}`", field)) - } - - /// raised when a `deserialize` struct type did not receive a field. - fn missing_field(field: &'static str) -> Self { - Error::custom(format!("Missing field `{}`", field)) - } - - /// Raised when a `Deserialize` struct type received more than one of the - /// same struct field. - fn duplicate_field(field: &'static str) -> Self { - Error::custom(format!("Duplicate field `{}`", field)) - } -} - -/// `Type` represents all the primitive types that can be deserialized. This is used by -/// `Error::invalid_type`. -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub enum Type { - /// Represents a `bool` type. - Bool, - - /// Represents a `usize` type. - Usize, - - /// Represents a `u8` type. - U8, - - /// Represents a `u16` type. - U16, - - /// Represents a `u32` type. - U32, - - /// Represents a `u64` type. - U64, - - /// Represents a `isize` type. - Isize, - - /// Represents a `i8` type. - I8, - - /// Represents a `i16` type. - I16, - - /// Represents a `i32` type. - I32, - - /// Represents a `i64` type. - I64, - - /// Represents a `f32` type. - F32, - - /// Represents a `f64` type. - F64, - - /// Represents a `char` type. - Char, - - /// Represents a `&str` type. - Str, - - /// Represents a `String` type. - String, - - /// Represents a `()` type. - Unit, - - /// Represents an `Option` type. - Option, - - /// Represents a sequence type. - Seq, - - /// Represents a map type. - Map, - - /// Represents a unit struct type. - UnitStruct, - - /// Represents a newtype type. - NewtypeStruct, - - /// Represents a tuple struct type. - TupleStruct, - - /// Represents a struct type. - Struct, - - /// Represents a struct field name. - FieldName, - - /// Represents a tuple type. - Tuple, - - /// Represents an `enum` type. - Enum, - - /// Represents an enum variant name. - VariantName, - - /// Represents a struct variant. - StructVariant, - - /// Represents a tuple variant. - TupleVariant, - - /// Represents a unit variant. - UnitVariant, - - /// Represents a `&[u8]` type. - Bytes, -} - -impl fmt::Display for Type { - fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> { - let display = match *self { - Type::Bool => "bool", - Type::Usize => "usize", - Type::U8 => "u8", - Type::U16 => "u16", - Type::U32 => "u32", - Type::U64 => "u64", - Type::Isize => "isize", - Type::I8 => "i8", - Type::I16 => "i16", - Type::I32 => "i32", - Type::I64 => "i64", - Type::F32 => "f32", - Type::F64 => "f64", - Type::Char => "char", - Type::Str => "str", - Type::String => "string", - Type::Unit => "unit", - Type::Option => "option", - Type::Seq => "seq", - Type::Map => "map", - Type::UnitStruct => "unit struct", - Type::NewtypeStruct => "newtype struct", - Type::TupleStruct => "tuple struct", - Type::Struct => "struct", - Type::FieldName => "field name", - Type::Tuple => "tuple", - Type::Enum => "enum", - Type::VariantName => "variant name", - Type::StructVariant => "struct variant", - Type::TupleVariant => "tuple variant", - Type::UnitVariant => "unit variant", - Type::Bytes => "bytes", - }; - display.fmt(formatter) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// `Deserialize` represents a type that can be deserialized. -pub trait Deserialize: Sized { - /// Deserialize this value given this `Deserializer`. - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer; -} - -/////////////////////////////////////////////////////////////////////////////// - -/// `Deserializer` is a trait that can deserialize values by threading a `Visitor` trait through a -/// value. It supports two entry point styles which enables different kinds of deserialization. -/// -/// 1) The `deserialize` method. File formats like JSON embed the type of its construct in its file -/// format. This allows the `Deserializer` to deserialize into a generic type like -/// `json::Value`, which can represent all JSON types. -/// -/// 2) The `deserialize_*` methods. File formats like bincode do not embed in its format how to -/// decode its values. It relies instead on the `Deserialize` type to hint to the `Deserializer` -/// with the `deserialize_*` methods how it should parse the next value. One downside though to -/// only supporting the `deserialize_*` types is that it does not allow for deserializing into a -/// generic `json::Value`-esque type. -pub trait Deserializer { - /// The error type that can be returned if some error occurs during deserialization. - type Error: Error; - - /// This method walks a visitor through a value as it is being deserialized. - fn deserialize(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `bool` value. - fn deserialize_bool(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `usize` value. - /// A reasonable default is to forward to `deserialize_u64`. - fn deserialize_usize(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `u8` value. - /// A reasonable default is to forward to `deserialize_u64`. - fn deserialize_u8(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `u16` value. - /// A reasonable default is to forward to `deserialize_u64`. - fn deserialize_u16(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `u32` value. - /// A reasonable default is to forward to `deserialize_u64`. - fn deserialize_u32(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `u64` value. - fn deserialize_u64(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `isize` value. - /// A reasonable default is to forward to `deserialize_i64`. - fn deserialize_isize(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `i8` value. - /// A reasonable default is to forward to `deserialize_i64`. - fn deserialize_i8(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `i16` value. - /// A reasonable default is to forward to `deserialize_i64`. - fn deserialize_i16(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `i32` value. - /// A reasonable default is to forward to `deserialize_i64`. - fn deserialize_i32(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `i64` value. - fn deserialize_i64(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `f32` value. - /// A reasonable default is to forward to `deserialize_f64`. - fn deserialize_f32(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `f64` value. - fn deserialize_f64(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `char` value. - fn deserialize_char(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `&str` value. - fn deserialize_str(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `String` value. - fn deserialize_string(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `unit` value. - fn deserialize_unit(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an `Option` value. This allows - /// deserializers that encode an optional value as a nullable value to convert the null value - /// into a `None`, and a regular value as `Some(value)`. - fn deserialize_option(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a sequence value. This allows - /// deserializers to parse sequences that aren't tagged as sequences. - fn deserialize_seq(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a fixed size array. This allows - /// deserializers to parse arrays that aren't tagged as arrays. - fn deserialize_seq_fixed_size(&mut self, - len: usize, - visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a `Vec`. This allows - /// deserializers that provide a custom byte vector serialization to properly deserialize the - /// type. - fn deserialize_bytes(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a map of values. This allows - /// deserializers to parse sequences that aren't tagged as maps. - fn deserialize_map(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a unit struct. This allows - /// deserializers to a unit struct that aren't tagged as a unit struct. - fn deserialize_unit_struct(&mut self, - name: &'static str, - visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a newtype struct. This allows - /// deserializers to a newtype struct that aren't tagged as a newtype struct. - /// A reasonable default is to simply deserialize the expected value directly. - fn deserialize_newtype_struct(&mut self, - name: &'static str, - visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a tuple struct. This allows - /// deserializers to parse sequences that aren't tagged as sequences. - fn deserialize_tuple_struct(&mut self, - name: &'static str, - len: usize, - visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a struct. This allows - /// deserializers to parse sequences that aren't tagged as maps. - fn deserialize_struct(&mut self, - name: &'static str, - fields: &'static [&'static str], - visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting some sort of struct field - /// name. This allows deserializers to choose between &str, usize, or &[u8] to properly - /// deserialize a struct field. - fn deserialize_struct_field(&mut self, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting a tuple value. This allows - /// deserializers that provide a custom tuple serialization to properly deserialize the type. - fn deserialize_tuple(&mut self, len: usize, visitor: V) -> Result - where V: Visitor; - - /// This method hints that the `Deserialize` type is expecting an enum value. This allows - /// deserializers that provide a custom enumeration serialization to properly deserialize the - /// type. - fn deserialize_enum(&mut self, - name: &'static str, - variants: &'static [&'static str], - visitor: V) -> Result - where V: EnumVisitor; - - /// This method hints that the `Deserialize` type needs to deserialize a value whose type - /// doesn't matter because it is ignored. - fn deserialize_ignored_any(&mut self, visitor: V) -> Result - where V: Visitor; -} - -/////////////////////////////////////////////////////////////////////////////// - -/// This trait represents a visitor that walks through a deserializer. -pub trait Visitor { - /// The value produced by this visitor. - type Value: Deserialize; - - /// `visit_bool` deserializes a `bool` into a `Value`. - fn visit_bool(&mut self, v: bool) -> Result - where E: Error, - { - let _ = v; - Err(Error::invalid_type(Type::Bool)) - } - - /// `visit_isize` deserializes a `isize` into a `Value`. - fn visit_isize(&mut self, v: isize) -> Result - where E: Error, - { - self.visit_i64(v as i64) - } - - /// `visit_i8` deserializes a `i8` into a `Value`. - fn visit_i8(&mut self, v: i8) -> Result - where E: Error, - { - self.visit_i64(v as i64) - } - - /// `visit_i16` deserializes a `i16` into a `Value`. - fn visit_i16(&mut self, v: i16) -> Result - where E: Error, - { - self.visit_i64(v as i64) - } - - /// `visit_i32` deserializes a `i32` into a `Value`. - fn visit_i32(&mut self, v: i32) -> Result - where E: Error, - { - self.visit_i64(v as i64) - } - - /// `visit_i64` deserializes a `i64` into a `Value`. - fn visit_i64(&mut self, v: i64) -> Result - where E: Error, - { - let _ = v; - Err(Error::invalid_type(Type::I64)) - } - - /// `visit_usize` deserializes a `usize` into a `Value`. - fn visit_usize(&mut self, v: usize) -> Result - where E: Error, - { - self.visit_u64(v as u64) - } - - /// `visit_u8` deserializes a `u8` into a `Value`. - fn visit_u8(&mut self, v: u8) -> Result - where E: Error, - { - self.visit_u64(v as u64) - } - - /// `visit_u16` deserializes a `u16` into a `Value`. - fn visit_u16(&mut self, v: u16) -> Result - where E: Error, - { - self.visit_u64(v as u64) - } - - /// `visit_u32` deserializes a `u32` into a `Value`. - fn visit_u32(&mut self, v: u32) -> Result - where E: Error, - { - self.visit_u64(v as u64) - } - - /// `visit_u64` deserializes a `u64` into a `Value`. - fn visit_u64(&mut self, v: u64) -> Result - where E: Error, - { - let _ = v; - Err(Error::invalid_type(Type::U64)) - } - - /// `visit_f32` deserializes a `f32` into a `Value`. - fn visit_f32(&mut self, v: f32) -> Result - where E: Error, - { - self.visit_f64(v as f64) - } - - /// `visit_f64` deserializes a `f64` into a `Value`. - fn visit_f64(&mut self, v: f64) -> Result - where E: Error, - { - let _ = v; - Err(Error::invalid_type(Type::F64)) - } - - /// `visit_char` deserializes a `char` into a `Value`. - #[inline] - fn visit_char(&mut self, v: char) -> Result - where E: Error, - { - self.visit_str(::utils::encode_utf8(v).as_str()) - } - - /// `visit_str` deserializes a `&str` into a `Value`. - fn visit_str(&mut self, v: &str) -> Result - where E: Error, - { - let _ = v; - Err(Error::invalid_type(Type::Str)) - } - - /// `visit_string` deserializes a `String` into a `Value`. This allows a deserializer to avoid - /// a copy if it is deserializing a string from a `String` type. By default it passes a `&str` - /// to the `visit_str` method. - #[inline] - #[cfg(any(feature = "std", feature = "collections"))] - fn visit_string(&mut self, v: String) -> Result - where E: Error, - { - self.visit_str(&v) - } - - /// `visit_unit` deserializes a `()` into a `Value`. - fn visit_unit(&mut self) -> Result - where E: Error, - { - Err(Error::invalid_type(Type::Unit)) - } - - /// `visit_unit_struct` deserializes a unit struct into a `Value`. - #[inline] - fn visit_unit_struct(&mut self, name: &'static str) -> Result - where E: Error, - { - let _ = name; - self.visit_unit() - } - - /// `visit_none` deserializes a none value into a `Value`. - fn visit_none(&mut self) -> Result - where E: Error, - { - Err(Error::invalid_type(Type::Option)) - } - - /// `visit_some` deserializes a value into a `Value`. - fn visit_some(&mut self, deserializer: &mut D) -> Result - where D: Deserializer, - { - let _ = deserializer; - Err(Error::invalid_type(Type::Option)) - } - - /// `visit_newtype_struct` deserializes a value into a `Value`. - fn visit_newtype_struct(&mut self, deserializer: &mut D) -> Result - where D: Deserializer, - { - let _ = deserializer; - Err(Error::invalid_type(Type::NewtypeStruct)) - } - - /// `visit_seq` deserializes a `SeqVisitor` into a `Value`. - fn visit_seq(&mut self, visitor: V) -> Result - where V: SeqVisitor, - { - let _ = visitor; - Err(Error::invalid_type(Type::Seq)) - } - - /// `visit_map` deserializes a `MapVisitor` into a `Value`. - fn visit_map(&mut self, visitor: V) -> Result - where V: MapVisitor, - { - let _ = visitor; - Err(Error::invalid_type(Type::Map)) - } - - /// `visit_bytes` deserializes a `&[u8]` into a `Value`. - fn visit_bytes(&mut self, v: &[u8]) -> Result - where E: Error, - { - let _ = v; - Err(Error::invalid_type(Type::Bytes)) - } - - /// `visit_byte_buf` deserializes a `Vec` into a `Value`. - #[cfg(any(feature = "std", feature = "collections"))] - fn visit_byte_buf(&mut self, v: Vec) -> Result - where E: Error, - { - self.visit_bytes(&v) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// `SeqVisitor` visits each item in a sequence. -/// -/// This is a trait that a `Deserializer` passes to a `Visitor` implementation, which deserializes -/// each item in a sequence. -pub trait SeqVisitor { - /// The error type that can be returned if some error occurs during deserialization. - type Error: Error; - - /// This returns a `Ok(Some(value))` for the next value in the sequence, or `Ok(None)` if there - /// are no more remaining items. - fn visit(&mut self) -> Result, Self::Error> - where T: Deserialize; - - /// This signals to the `SeqVisitor` that the `Visitor` does not expect any more items. - fn end(&mut self) -> Result<(), Self::Error>; - - /// Return the lower and upper bound of items remaining in the sequence. - #[inline] - fn size_hint(&self) -> (usize, Option) { - (0, None) - } -} - -impl<'a, V> SeqVisitor for &'a mut V where V: SeqVisitor { - type Error = V::Error; - - #[inline] - fn visit(&mut self) -> Result, V::Error> - where T: Deserialize - { - (**self).visit() - } - - #[inline] - fn end(&mut self) -> Result<(), V::Error> { - (**self).end() - } - - #[inline] - fn size_hint(&self) -> (usize, Option) { - (**self).size_hint() - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// `MapVisitor` visits each item in a sequence. -/// -/// This is a trait that a `Deserializer` passes to a `Visitor` implementation. -pub trait MapVisitor { - /// The error type that can be returned if some error occurs during deserialization. - type Error: Error; - - /// This returns a `Ok(Some((key, value)))` for the next (key-value) pair in the map, or - /// `Ok(None)` if there are no more remaining items. - #[inline] - fn visit(&mut self) -> Result, Self::Error> - where K: Deserialize, - V: Deserialize, - { - match try!(self.visit_key()) { - Some(key) => { - let value = try!(self.visit_value()); - Ok(Some((key, value))) - } - None => Ok(None) - } - } - - /// This returns a `Ok(Some(key))` for the next key in the map, or `Ok(None)` if there are no - /// more remaining items. - fn visit_key(&mut self) -> Result, Self::Error> - where K: Deserialize; - - /// This returns a `Ok(value)` for the next value in the map. - fn visit_value(&mut self) -> Result - where V: Deserialize; - - /// This signals to the `MapVisitor` that the `Visitor` does not expect any more items. - fn end(&mut self) -> Result<(), Self::Error>; - - /// Return the lower and upper bound of items remaining in the sequence. - #[inline] - fn size_hint(&self) -> (usize, Option) { - (0, None) - } - - /// Report that the struct has a field that wasn't deserialized - fn missing_field(&mut self, field: &'static str) -> Result - where V: Deserialize, - { - Err(Error::missing_field(field)) - } -} - -impl<'a, V_> MapVisitor for &'a mut V_ where V_: MapVisitor { - type Error = V_::Error; - - #[inline] - fn visit(&mut self) -> Result, V_::Error> - where K: Deserialize, - V: Deserialize, - { - (**self).visit() - } - - #[inline] - fn visit_key(&mut self) -> Result, V_::Error> - where K: Deserialize - { - (**self).visit_key() - } - - #[inline] - fn visit_value(&mut self) -> Result - where V: Deserialize - { - (**self).visit_value() - } - - #[inline] - fn end(&mut self) -> Result<(), V_::Error> { - (**self).end() - } - - #[inline] - fn size_hint(&self) -> (usize, Option) { - (**self).size_hint() - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// `EnumVisitor` is a visitor that is created by the `Deserialize` and passed to the -/// `Deserializer` in order to deserialize enums. -pub trait EnumVisitor { - /// The value produced by this visitor. - type Value; - - /// Visit the specific variant with the `VariantVisitor`. - fn visit(&mut self, visitor: V) -> Result - where V: VariantVisitor; -} - -/////////////////////////////////////////////////////////////////////////////// - -/// `VariantVisitor` is a visitor that is created by the `Deserializer` and passed to the -/// `Deserialize` in order to deserialize a specific enum variant. -pub trait VariantVisitor { - /// The error type that can be returned if some error occurs during deserialization. - type Error: Error; - - /// `visit_variant` is called to identify which variant to deserialize. - fn visit_variant(&mut self) -> Result - where V: Deserialize; - - /// `visit_unit` is called when deserializing a variant with no values. - fn visit_unit(&mut self) -> Result<(), Self::Error> { - Err(Error::invalid_type(Type::UnitVariant)) - } - - /// `visit_newtype` is called when deserializing a variant with a single value. - /// A good default is often to use the `visit_tuple` method to deserialize a `(value,)`. - fn visit_newtype(&mut self) -> Result - where T: Deserialize; - - /// `visit_tuple` is called when deserializing a tuple-like variant. - /// If no tuple variants are expected, yield a - /// `Err(serde::de::Error::invalid_type(serde::de::Type::TupleVariant))` - fn visit_tuple(&mut self, - len: usize, - visitor: V) -> Result - where V: Visitor; - - /// `visit_struct` is called when deserializing a struct-like variant. - /// If no struct variants are expected, yield a - /// `Err(serde::de::Error::invalid_type(serde::de::Type::StructVariant))` - fn visit_struct(&mut self, - fields: &'static [&'static str], - visitor: V) -> Result - where V: Visitor; -} - -impl<'a, T> VariantVisitor for &'a mut T where T: VariantVisitor { - type Error = T::Error; - - fn visit_variant(&mut self) -> Result - where V: Deserialize - { - (**self).visit_variant() - } - - fn visit_unit(&mut self) -> Result<(), T::Error> { - (**self).visit_unit() - } - - fn visit_newtype(&mut self) -> Result - where D: Deserialize, - { - (**self).visit_newtype() - } - - fn visit_tuple(&mut self, - len: usize, - visitor: V) -> Result - where V: Visitor, - { - (**self).visit_tuple(len, visitor) - } - - fn visit_struct(&mut self, - fields: &'static [&'static str], - visitor: V) -> Result - where V: Visitor, - { - (**self).visit_struct(fields, visitor) - } -} diff --git a/third_party/rust/serde-0.8.23/src/de/value.rs b/third_party/rust/serde-0.8.23/src/de/value.rs deleted file mode 100644 index 00b07107e0da..000000000000 --- a/third_party/rust/serde-0.8.23/src/de/value.rs +++ /dev/null @@ -1,1067 +0,0 @@ -//! This module supports deserializing from primitives with the `ValueDeserializer` trait. - -#[cfg(feature = "std")] -use std::collections::{ - BTreeMap, - BTreeSet, - HashMap, - HashSet, - btree_map, - btree_set, - hash_map, - hash_set, -}; -#[cfg(feature = "std")] -use std::borrow::Cow; -#[cfg(feature = "std")] -use std::vec; - -#[cfg(all(feature = "collections", not(feature = "std")))] -use collections::{ - BTreeMap, - BTreeSet, - Vec, - String, - btree_map, - btree_set, - vec, -}; -#[cfg(all(feature = "collections", not(feature = "std")))] -use collections::borrow::Cow; - -#[cfg(all(feature = "unstable", feature = "collections"))] -use collections::borrow::ToOwned; - -use core::hash::Hash; -#[cfg(feature = "std")] -use std::error; -#[cfg(not(feature = "std"))] -use error; - -use core::fmt; -use core::marker::PhantomData; - -use de; -use bytes; - -/////////////////////////////////////////////////////////////////////////////// - -/// This represents all the possible errors that can occur using the `ValueDeserializer`. -#[derive(Clone, Debug, PartialEq)] -pub enum Error { - /// The value had some custom error. - #[cfg(any(feature = "std", feature = "collections"))] - Custom(String), - /// The value had some custom error. - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - Custom(&'static str), - - /// The value had an incorrect type. - InvalidType(de::Type), - - /// The value had an invalid length. - InvalidLength(usize), - - /// The value is invalid and cannot be deserialized. - #[cfg(any(feature = "std", feature = "collections"))] - InvalidValue(String), - /// The value is invalid and cannot be deserialized. - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - InvalidValue(&'static str), - - /// EOF while deserializing a value. - EndOfStream, - - /// Unknown variant in enum. - #[cfg(any(feature = "std", feature = "collections"))] - UnknownVariant(String), - /// Unknown variant in enum. - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - UnknownVariant(&'static str), - - /// Unknown field in struct. - #[cfg(any(feature = "std", feature = "collections"))] - UnknownField(String), - /// Unknown field in struct. - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - UnknownField(&'static str), - - /// Struct is missing a field. - MissingField(&'static str), -} - -impl de::Error for Error { - #[cfg(any(feature = "std", feature = "collections"))] - fn custom>(msg: T) -> Self { Error::Custom(msg.into()) } - - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn custom>(msg: T) -> Self { Error::Custom(msg.into()) } - - fn end_of_stream() -> Self { Error::EndOfStream } - fn invalid_type(ty: de::Type) -> Self { Error::InvalidType(ty) } - - #[cfg(any(feature = "std", feature = "collections"))] - fn invalid_value(msg: &str) -> Self { Error::InvalidValue(msg.to_owned()) } - - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn invalid_value(msg: &str) -> Self { Error::InvalidValue("invalid value") } - - fn invalid_length(len: usize) -> Self { Error::InvalidLength(len) } - - #[cfg(any(feature = "std", feature = "collections"))] - fn unknown_variant(variant: &str) -> Self { Error::UnknownVariant(String::from(variant)) } - #[cfg(any(feature = "std", feature = "collections"))] - fn unknown_field(field: &str) -> Self { Error::UnknownField(String::from(field)) } - - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn unknown_variant(variant: &str) -> Self { Error::UnknownVariant("unknown variant") } - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn unknown_field(field: &str) -> Self { Error::UnknownField("unknown field") } - fn missing_field(field: &'static str) -> Self { Error::MissingField(field) } -} - -impl fmt::Display for Error { - fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> { - match *self { - Error::Custom(ref s) => write!(formatter, "{}", s), - Error::EndOfStream => formatter.write_str("End of stream"), - Error::InvalidType(ty) => write!(formatter, "Invalid type, expected `{:?}`", ty), - Error::InvalidValue(ref value) => write!(formatter, "Invalid value: {}", value), - Error::InvalidLength(len) => write!(formatter, "Invalid length: {}", len), - Error::UnknownVariant(ref variant) => { - write!(formatter, "Unknown variant: {}", variant) - } - Error::UnknownField(ref field) => write!(formatter, "Unknown field: {}", field), - Error::MissingField(field) => write!(formatter, "Missing field: {}", field), - } - } -} - -impl error::Error for Error { - fn description(&self) -> &str { - "Serde Deserialization Error" - } - - fn cause(&self) -> Option<&error::Error> { - None - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// This trait converts primitive types into a deserializer. -pub trait ValueDeserializer { - /// The actual deserializer type. - type Deserializer: de::Deserializer; - - /// Convert this value into a deserializer. - fn into_deserializer(self) -> Self::Deserializer; -} - -/////////////////////////////////////////////////////////////////////////////// - -impl ValueDeserializer for () - where E: de::Error, -{ - type Deserializer = UnitDeserializer; - - fn into_deserializer(self) -> UnitDeserializer { - UnitDeserializer(PhantomData) - } -} - -/// A helper deserializer that deserializes a `()`. -pub struct UnitDeserializer(PhantomData); - -impl de::Deserializer for UnitDeserializer - where E: de::Error -{ - type Error = E; - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple enum ignored_any - } - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - visitor.visit_unit() - } - - fn deserialize_option(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - visitor.visit_none() - } -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! primitive_deserializer { - ($ty:ty, $name:ident, $method:ident) => { - /// A helper deserializer that deserializes a number. - pub struct $name(Option<$ty>, PhantomData); - - impl ValueDeserializer for $ty - where E: de::Error, - { - type Deserializer = $name; - - fn into_deserializer(self) -> $name { - $name(Some(self), PhantomData) - } - } - - impl de::Deserializer for $name - where E: de::Error, - { - type Error = E; - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str - string unit option seq seq_fixed_size bytes map unit_struct - newtype_struct tuple_struct struct struct_field tuple enum - ignored_any - } - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some(v) => visitor.$method(v), - None => Err(de::Error::end_of_stream()), - } - } - } - } -} - -primitive_deserializer!(bool, BoolDeserializer, visit_bool); -primitive_deserializer!(i8, I8Deserializer, visit_i8); -primitive_deserializer!(i16, I16Deserializer, visit_i16); -primitive_deserializer!(i32, I32Deserializer, visit_i32); -primitive_deserializer!(i64, I64Deserializer, visit_i64); -primitive_deserializer!(isize, IsizeDeserializer, visit_isize); -primitive_deserializer!(u8, U8Deserializer, visit_u8); -primitive_deserializer!(u16, U16Deserializer, visit_u16); -primitive_deserializer!(u32, U32Deserializer, visit_u32); -primitive_deserializer!(u64, U64Deserializer, visit_u64); -primitive_deserializer!(usize, UsizeDeserializer, visit_usize); -primitive_deserializer!(f32, F32Deserializer, visit_f32); -primitive_deserializer!(f64, F64Deserializer, visit_f64); -primitive_deserializer!(char, CharDeserializer, visit_char); - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a `&str`. -pub struct StrDeserializer<'a, E>(Option<&'a str>, PhantomData); - -impl<'a, E> ValueDeserializer for &'a str - where E: de::Error, -{ - type Deserializer = StrDeserializer<'a, E>; - - fn into_deserializer(self) -> StrDeserializer<'a, E> { - StrDeserializer(Some(self), PhantomData) - } -} - -impl<'a, E> de::Deserializer for StrDeserializer<'a, E> - where E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some(v) => visitor.visit_str(v), - None => Err(de::Error::end_of_stream()), - } - } - - fn deserialize_enum(&mut self, - _name: &str, - _variants: &'static [&'static str], - mut visitor: V) -> Result - where V: de::EnumVisitor, - { - visitor.visit(self) - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple ignored_any - } -} - -impl<'a, E> de::VariantVisitor for StrDeserializer<'a, E> - where E: de::Error, -{ - type Error = E; - - fn visit_variant(&mut self) -> Result - where T: de::Deserialize, - { - de::Deserialize::deserialize(self) - } - - fn visit_unit(&mut self) -> Result<(), Self::Error> { - Ok(()) - } - - fn visit_newtype(&mut self) -> Result - where T: super::Deserialize, - { - let (value,) = try!(self.visit_tuple(1, super::impls::TupleVisitor1::new())); - Ok(value) - } - - fn visit_tuple(&mut self, - _len: usize, - _visitor: V) -> Result - where V: super::Visitor - { - Err(super::Error::invalid_type(super::Type::TupleVariant)) - } - - fn visit_struct(&mut self, - _fields: &'static [&'static str], - _visitor: V) -> Result - where V: super::Visitor - { - Err(super::Error::invalid_type(super::Type::StructVariant)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a `String`. -#[cfg(any(feature = "std", feature = "collections"))] -pub struct StringDeserializer(Option, PhantomData); - -#[cfg(any(feature = "std", feature = "collections"))] -impl ValueDeserializer for String - where E: de::Error, -{ - type Deserializer = StringDeserializer; - - fn into_deserializer(self) -> StringDeserializer { - StringDeserializer(Some(self), PhantomData) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl de::Deserializer for StringDeserializer - where E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some(string) => visitor.visit_string(string), - None => Err(de::Error::end_of_stream()), - } - } - - fn deserialize_enum(&mut self, - _name: &str, - _variants: &'static [&'static str], - mut visitor: V) -> Result - where V: de::EnumVisitor, - { - visitor.visit(self) - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple ignored_any - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a, E> de::VariantVisitor for StringDeserializer - where E: de::Error, -{ - type Error = E; - - fn visit_variant(&mut self) -> Result - where T: de::Deserialize, - { - de::Deserialize::deserialize(self) - } - - fn visit_unit(&mut self) -> Result<(), Self::Error> { - Ok(()) - } - - fn visit_newtype(&mut self) -> Result - where T: super::Deserialize, - { - let (value,) = try!(self.visit_tuple(1, super::impls::TupleVisitor1::new())); - Ok(value) - } - - fn visit_tuple(&mut self, - _len: usize, - _visitor: V) -> Result - where V: super::Visitor - { - Err(super::Error::invalid_type(super::Type::TupleVariant)) - } - - fn visit_struct(&mut self, - _fields: &'static [&'static str], - _visitor: V) -> Result - where V: super::Visitor - { - Err(super::Error::invalid_type(super::Type::StructVariant)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a `String`. -#[cfg(any(feature = "std", feature = "collections"))] -pub struct CowStrDeserializer<'a, E>(Option>, PhantomData); - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a, E> ValueDeserializer for Cow<'a, str> - where E: de::Error, -{ - type Deserializer = CowStrDeserializer<'a, E>; - - fn into_deserializer(self) -> CowStrDeserializer<'a, E> { - CowStrDeserializer(Some(self), PhantomData) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a, E> de::Deserializer for CowStrDeserializer<'a, E> - where E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some(Cow::Borrowed(string)) => visitor.visit_str(string), - Some(Cow::Owned(string)) => visitor.visit_string(string), - None => Err(de::Error::end_of_stream()), - } - } - - fn deserialize_enum(&mut self, - _name: &str, - _variants: &'static [&'static str], - mut visitor: V) -> Result - where V: de::EnumVisitor, - { - visitor.visit(self) - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple ignored_any - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a, E> de::VariantVisitor for CowStrDeserializer<'a, E> - where E: de::Error, -{ - type Error = E; - - fn visit_variant(&mut self) -> Result - where T: de::Deserialize, - { - de::Deserialize::deserialize(self) - } - - fn visit_unit(&mut self) -> Result<(), Self::Error> { - Ok(()) - } - - fn visit_newtype(&mut self) -> Result - where T: super::Deserialize, - { - let (value,) = try!(self.visit_tuple(1, super::impls::TupleVisitor1::new())); - Ok(value) - } - - fn visit_tuple(&mut self, - _len: usize, - _visitor: V) -> Result - where V: super::Visitor - { - Err(super::Error::invalid_type(super::Type::TupleVariant)) - } - - fn visit_struct(&mut self, - _fields: &'static [&'static str], - _visitor: V) -> Result - where V: super::Visitor - { - Err(super::Error::invalid_type(super::Type::StructVariant)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a sequence. -pub struct SeqDeserializer { - iter: I, - len: usize, - marker: PhantomData, -} - -impl SeqDeserializer - where E: de::Error, -{ - /// Construct a new `SeqDeserializer`. - pub fn new(iter: I, len: usize) -> Self { - SeqDeserializer { - iter: iter, - len: len, - marker: PhantomData, - } - } -} - -impl de::Deserializer for SeqDeserializer - where I: Iterator, - T: ValueDeserializer, - E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - visitor.visit_seq(self) - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple enum ignored_any - } -} - -impl de::SeqVisitor for SeqDeserializer - where I: Iterator, - T: ValueDeserializer, - E: de::Error, -{ - type Error = E; - - fn visit(&mut self) -> Result, Self::Error> - where V: de::Deserialize - { - match self.iter.next() { - Some(value) => { - self.len -= 1; - let mut de = value.into_deserializer(); - Ok(Some(try!(de::Deserialize::deserialize(&mut de)))) - } - None => Ok(None), - } - } - - fn end(&mut self) -> Result<(), Self::Error> { - if self.len == 0 { - Ok(()) - } else { - Err(de::Error::invalid_length(self.len)) - } - } - - fn size_hint(&self) -> (usize, Option) { - (self.len, Some(self.len)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "collections"))] -impl ValueDeserializer for Vec - where T: ValueDeserializer, - E: de::Error, -{ - type Deserializer = SeqDeserializer, E>; - - fn into_deserializer(self) -> Self::Deserializer { - let len = self.len(); - SeqDeserializer::new(self.into_iter(), len) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl ValueDeserializer for BTreeSet - where T: ValueDeserializer + Eq + Ord, - E: de::Error, -{ - type Deserializer = SeqDeserializer, E>; - - fn into_deserializer(self) -> Self::Deserializer { - let len = self.len(); - SeqDeserializer::new(self.into_iter(), len) - } -} - -#[cfg(feature = "std")] -impl ValueDeserializer for HashSet - where T: ValueDeserializer + Eq + Hash, - E: de::Error, -{ - type Deserializer = SeqDeserializer, E>; - - fn into_deserializer(self) -> Self::Deserializer { - let len = self.len(); - SeqDeserializer::new(self.into_iter(), len) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a sequence using a `SeqVisitor`. -pub struct SeqVisitorDeserializer { - visitor: V_, - marker: PhantomData, -} - -impl SeqVisitorDeserializer - where V_: de::SeqVisitor, - E: de::Error, -{ - /// Construct a new `SeqVisitorDeserializer`. - pub fn new(visitor: V_) -> Self { - SeqVisitorDeserializer{ - visitor: visitor, - marker: PhantomData - } - } -} - -impl de::Deserializer for SeqVisitorDeserializer - where V_: de::SeqVisitor, - E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result { - visitor.visit_seq(&mut self.visitor) - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple enum ignored_any - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a map. -pub struct MapDeserializer - where I: Iterator, - K: ValueDeserializer, - V: ValueDeserializer, - E: de::Error, -{ - iter: I, - value: Option, - len: Option, - marker: PhantomData, -} - -impl MapDeserializer - where I: Iterator, - K: ValueDeserializer, - V: ValueDeserializer, - E: de::Error, -{ - /// Construct a new `MapDeserializer` with a specific length. - pub fn new(iter: I, len: usize) -> Self { - MapDeserializer { - iter: iter, - value: None, - len: Some(len), - marker: PhantomData, - } - } - - /// Construct a new `MapDeserializer` that is not bounded - /// by a specific length and that delegates to `iter` for its size hint. - pub fn unbounded(iter: I) -> Self { - MapDeserializer { - iter: iter, - value: None, - len: None, - marker: PhantomData, - } - } - - fn next(&mut self) -> Option<(K, V)> { - self.iter.next().map(|(k, v)| { - if let Some(len) = self.len.as_mut() { - *len -= 1; - } - (k, v) - }) - } -} - -impl de::Deserializer for MapDeserializer - where I: Iterator, - K: ValueDeserializer, - V: ValueDeserializer, - E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V_) -> Result - where V_: de::Visitor, - { - visitor.visit_map(self) - } - - fn deserialize_seq(&mut self, mut visitor: V_) -> Result - where V_: de::Visitor, - { - visitor.visit_seq(self) - } - - fn deserialize_seq_fixed_size(&mut self, len: usize, mut visitor: V_) -> Result - where V_: de::Visitor, - { - match self.len { - Some(map_len) if map_len == len => visitor.visit_seq(self), - Some(_) => Err(de::Error::invalid_length(len)), - None => visitor.visit_seq(self), - } - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option bytes map unit_struct newtype_struct tuple_struct struct - struct_field tuple enum ignored_any - } -} - -impl de::MapVisitor for MapDeserializer - where I: Iterator, - K: ValueDeserializer, - V: ValueDeserializer, - E: de::Error, -{ - type Error = E; - - fn visit_key(&mut self) -> Result, Self::Error> - where T: de::Deserialize, - { - match self.next() { - Some((key, value)) => { - self.value = Some(value); - let mut de = key.into_deserializer(); - de::Deserialize::deserialize(&mut de).map(Some) - } - None => Ok(None), - } - } - - fn visit_value(&mut self) -> Result - where T: de::Deserialize, - { - match self.value.take() { - Some(value) => { - let mut de = value.into_deserializer(); - de::Deserialize::deserialize(&mut de) - } - None => { - Err(de::Error::end_of_stream()) - } - } - } - - fn end(&mut self) -> Result<(), Self::Error> { - match self.len { - Some(len) if len > 0 => Err(de::Error::invalid_length(len)), - _ => Ok(()) - } - } - - fn size_hint(&self) -> (usize, Option) { - self.len.map_or_else( - || self.iter.size_hint(), - |len| (len, Some(len))) - } -} - -impl de::SeqVisitor for MapDeserializer - where I: Iterator, - K: ValueDeserializer, - V: ValueDeserializer, - E: de::Error, -{ - type Error = E; - - fn visit(&mut self) -> Result, Self::Error> - where T: de::Deserialize, - { - match self.next() { - Some(kv) => { - let mut de = PairDeserializer(Some(kv), PhantomData); - de::Deserialize::deserialize(&mut de).map(Some) - } - None => Ok(None), - } - } - - fn end(&mut self) -> Result<(), Self::Error> { - de::MapVisitor::end(self) - } - - fn size_hint(&self) -> (usize, Option) { - de::MapVisitor::size_hint(self) - } -} - -// Used in the `impl SeqVisitor for MapDeserializer` to visit the map as a -// sequence of pairs. -struct PairDeserializer(Option<(A, B)>, PhantomData); - -impl de::Deserializer for PairDeserializer - where A: ValueDeserializer, - B: ValueDeserializer, - E: de::Error -{ - type Error = E; - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option bytes map unit_struct newtype_struct tuple_struct struct - struct_field tuple enum ignored_any - } - - fn deserialize(&mut self, visitor: V) -> Result - where V: de::Visitor, - { - self.deserialize_seq(visitor) - } - - fn deserialize_seq(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some((k, v)) => { - visitor.visit_seq(PairVisitor(Some(k), Some(v), PhantomData)) - } - None => Err(de::Error::end_of_stream()), - } - } - - fn deserialize_seq_fixed_size(&mut self, len: usize, visitor: V) -> Result - where V: de::Visitor, - { - if len == 2 { - self.deserialize_seq(visitor) - } else { - Err(de::Error::invalid_length(len)) - } - } -} - -struct PairVisitor(Option, Option, PhantomData); - -impl de::SeqVisitor for PairVisitor - where A: ValueDeserializer, - B: ValueDeserializer, - E: de::Error, -{ - type Error = E; - - fn visit(&mut self) -> Result, Self::Error> - where T: de::Deserialize, - { - if let Some(k) = self.0.take() { - let mut de = k.into_deserializer(); - de::Deserialize::deserialize(&mut de).map(Some) - } else if let Some(v) = self.1.take() { - let mut de = v.into_deserializer(); - de::Deserialize::deserialize(&mut de).map(Some) - } else { - Ok(None) - } - } - - fn end(&mut self) -> Result<(), Self::Error> { - if self.1.is_none() { - Ok(()) - } else { - Err(de::Error::invalid_length(self.size_hint().0)) - } - } - - fn size_hint(&self) -> (usize, Option) { - let len = if self.0.is_some() { - 2 - } else if self.1.is_some() { - 1 - } else { - 0 - }; - (len, Some(len)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "collections"))] -impl ValueDeserializer for BTreeMap - where K: ValueDeserializer + Eq + Ord, - V: ValueDeserializer, - E: de::Error, -{ - type Deserializer = MapDeserializer, K, V, E>; - - fn into_deserializer(self) -> Self::Deserializer { - let len = self.len(); - MapDeserializer::new(self.into_iter(), len) - } -} - -#[cfg(feature = "std")] -impl ValueDeserializer for HashMap - where K: ValueDeserializer + Eq + Hash, - V: ValueDeserializer, - E: de::Error, -{ - type Deserializer = MapDeserializer, K, V, E>; - - fn into_deserializer(self) -> Self::Deserializer { - let len = self.len(); - MapDeserializer::new(self.into_iter(), len) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A helper deserializer that deserializes a map using a `MapVisitor`. -pub struct MapVisitorDeserializer { - visitor: V_, - marker: PhantomData, -} - -impl MapVisitorDeserializer - where V_: de::MapVisitor, - E: de::Error, -{ - /// Construct a new `MapVisitorDeserializer`. - pub fn new(visitor: V_) -> Self { - MapVisitorDeserializer{ - visitor: visitor, - marker: PhantomData - } - } -} - -impl de::Deserializer for MapVisitorDeserializer - where V_: de::MapVisitor, - E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result { - visitor.visit_map(&mut self.visitor) - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple enum ignored_any - } -} - -/////////////////////////////////////////////////////////////////////////////// - -impl<'a, E> ValueDeserializer for bytes::Bytes<'a> - where E: de::Error, -{ - type Deserializer = BytesDeserializer<'a, E>; - - fn into_deserializer(self) -> BytesDeserializer<'a, E> { - BytesDeserializer(Some(self.into()), PhantomData) - } -} - -/// A helper deserializer that deserializes a `&[u8]`. -pub struct BytesDeserializer<'a, E> (Option<&'a [u8]>, PhantomData); - -impl<'a, E> de::Deserializer for BytesDeserializer<'a, E> - where E: de::Error -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some(bytes) => visitor.visit_bytes(bytes), - None => Err(de::Error::end_of_stream()), - } - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple enum ignored_any - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "collections"))] -impl ValueDeserializer for bytes::ByteBuf - where E: de::Error, -{ - type Deserializer = ByteBufDeserializer; - - fn into_deserializer(self) -> Self::Deserializer { - ByteBufDeserializer(Some(self.into()), PhantomData) - } -} - -/// A helper deserializer that deserializes a `Vec`. -#[cfg(any(feature = "std", feature = "collections"))] -pub struct ByteBufDeserializer(Option>, PhantomData); - -#[cfg(any(feature = "std", feature = "collections"))] -impl de::Deserializer for ByteBufDeserializer - where E: de::Error, -{ - type Error = E; - - fn deserialize(&mut self, mut visitor: V) -> Result - where V: de::Visitor, - { - match self.0.take() { - Some(bytes) => visitor.visit_byte_buf(bytes), - None => Err(de::Error::end_of_stream()), - } - } - - forward_to_deserialize! { - bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string - unit option seq seq_fixed_size bytes map unit_struct newtype_struct - tuple_struct struct struct_field tuple enum ignored_any - } -} diff --git a/third_party/rust/serde-0.8.23/src/error.rs b/third_party/rust/serde-0.8.23/src/error.rs deleted file mode 100644 index 7e5fef72f2e7..000000000000 --- a/third_party/rust/serde-0.8.23/src/error.rs +++ /dev/null @@ -1,44 +0,0 @@ -//! A stand-in for `std::error` -use core::any::TypeId; -use core::fmt::{Debug, Display}; - - -/// A stand-in for `std::error::Error`, which requires no allocation. -#[cfg(feature = "unstable")] -pub trait Error: Debug + Display + ::core::marker::Reflect { - /// A short description of the error. - /// - /// The description should not contain newlines or sentence-ending - /// punctuation, to facilitate embedding in larger user-facing - /// strings. - fn description(&self) -> &str; - - /// The lower-level cause of this error, if any. - fn cause(&self) -> Option<&Error> { None } - - /// Get the `TypeId` of `self` - #[doc(hidden)] - fn type_id(&self) -> TypeId where Self: 'static { - TypeId::of::() - } -} - -/// A stand-in for `std::error::Error`, which requires no allocation. -#[cfg(not(feature = "unstable"))] -pub trait Error: Debug + Display { - /// A short description of the error. - /// - /// The description should not contain newlines or sentence-ending - /// punctuation, to facilitate embedding in larger user-facing - /// strings. - fn description(&self) -> &str; - - /// The lower-level cause of this error, if any. - fn cause(&self) -> Option<&Error> { None } - - /// Stubbed! Returns type_id of `()` - #[doc(hidden)] - fn type_id(&self) -> TypeId where Self: 'static { - TypeId::of::<()>() - } -} diff --git a/third_party/rust/serde-0.8.23/src/iter.rs b/third_party/rust/serde-0.8.23/src/iter.rs deleted file mode 100644 index 24a6bf307724..000000000000 --- a/third_party/rust/serde-0.8.23/src/iter.rs +++ /dev/null @@ -1,61 +0,0 @@ -//! Module that contains helper iterators. - -use std::io; -use std::iter::Peekable; - -/// Iterator over a byte stream that tracks the current position's line and column. -pub struct LineColIterator>> { - iter: Iter, - line: usize, - col: usize, -} - -impl>> LineColIterator { - /// Construct a new `LineColIterator`. - pub fn new(iter: Iter) -> LineColIterator { - LineColIterator { - iter: iter, - line: 1, - col: 0, - } - } - - /// Report the current line inside the iterator. - pub fn line(&self) -> usize { self.line } - - /// Report the current column inside the iterator. - pub fn col(&self) -> usize { self.col } - - /// Gets a reference to the underlying iterator. - pub fn get_ref(&self) -> &Iter { &self.iter } - - /// Gets a mutable reference to the underlying iterator. - pub fn get_mut(&mut self) -> &mut Iter { &mut self.iter } - - /// Unwraps this `LineColIterator`, returning the underlying iterator. - pub fn into_inner(self) -> Iter { self.iter } -} - -impl>> LineColIterator> { - /// peeks at the next value - pub fn peek(&mut self) -> Option<&io::Result> { self.iter.peek() } -} - -impl>> Iterator for LineColIterator { - type Item = io::Result; - fn next(&mut self) -> Option> { - match self.iter.next() { - None => None, - Some(Ok(b'\n')) => { - self.line += 1; - self.col = 0; - Some(Ok(b'\n')) - }, - Some(Ok(c)) => { - self.col += 1; - Some(Ok(c)) - }, - Some(Err(e)) => Some(Err(e)), - } - } -} diff --git a/third_party/rust/serde-0.8.23/src/lib.rs b/third_party/rust/serde-0.8.23/src/lib.rs deleted file mode 100644 index 78a0531e7299..000000000000 --- a/third_party/rust/serde-0.8.23/src/lib.rs +++ /dev/null @@ -1,58 +0,0 @@ -//! Serde Serialization Framework -//! -//! Serde is a powerful framework that enables serialization libraries to generically serialize -//! Rust data structures without the overhead of runtime type information. In many situations, the -//! handshake protocol between serializers and serializees can be completely optimized away, -//! leaving serde to perform roughly the same speed as a hand written serializer for a specific -//! type. -//! -//! For a detailed tutorial on the different ways to use serde please check out the -//! [github repository](https://github.com/serde-rs/serde) - -#![doc(html_root_url="https://docs.serde.rs")] -#![cfg_attr(not(feature = "std"), no_std)] -#![cfg_attr(feature = "unstable", feature(reflect_marker, unicode, nonzero, plugin, step_trait, zero_one))] -#![cfg_attr(feature = "alloc", feature(alloc))] -#![cfg_attr(feature = "collections", feature(collections, enumset))] -#![cfg_attr(feature = "clippy", plugin(clippy))] -#![cfg_attr(feature = "clippy", allow(linkedlist))] - -#![cfg_attr(any(not(feature = "std"), feature = "unstable"), allow(unused_variables, unused_imports, unused_features, dead_code))] - -#![deny(missing_docs)] - -#[cfg(all(feature = "unstable", feature = "collections"))] -extern crate collections; - -#[cfg(all(feature = "unstable", feature = "alloc"))] -extern crate alloc; - -#[cfg(feature = "std")] -mod core { - pub use std::{ops, hash, fmt, cmp, marker, mem, i8, i16, i32, i64, u8, u16, u32, u64, isize, - usize, f32, f64, char, str, num, slice, iter}; - #[cfg(feature = "unstable")] - extern crate core; - #[cfg(feature = "unstable")] - pub use self::core::nonzero; -} - -pub use ser::{Serialize, Serializer}; -pub use de::{Deserialize, Deserializer, Error}; - -#[cfg(not(feature = "std"))] -macro_rules! format { - ($s:expr, $($rest:tt)*) => ($s) -} - -#[macro_use] -mod macros; - -pub mod bytes; -pub mod de; -#[cfg(feature = "std")] -pub mod iter; -pub mod ser; -#[cfg(not(feature = "std"))] -pub mod error; -mod utils; diff --git a/third_party/rust/serde-0.8.23/src/macros.rs b/third_party/rust/serde-0.8.23/src/macros.rs deleted file mode 100644 index 6064c87ee5d8..000000000000 --- a/third_party/rust/serde-0.8.23/src/macros.rs +++ /dev/null @@ -1,179 +0,0 @@ -#[cfg(feature = "std")] -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_method { - ($func:ident($($arg:ty),*)) => { - #[inline] - fn $func<__V>(&mut self, $(_: $arg,)* visitor: __V) -> ::std::result::Result<__V::Value, Self::Error> - where __V: $crate::de::Visitor - { - self.deserialize(visitor) - } - }; -} - -#[cfg(not(feature = "std"))] -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_method { - ($func:ident($($arg:ty),*)) => { - #[inline] - fn $func<__V>(&mut self, $(_: $arg,)* visitor: __V) -> ::core::result::Result<__V::Value, Self::Error> - where __V: $crate::de::Visitor - { - self.deserialize(visitor) - } - }; -} - -#[cfg(feature = "std")] -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_enum { - () => { - #[inline] - fn deserialize_enum<__V>(&mut self, _: &str, _: &[&str], _: __V) -> ::std::result::Result<__V::Value, Self::Error> - where __V: $crate::de::EnumVisitor - { - Err($crate::de::Error::invalid_type($crate::de::Type::Enum)) - } - }; -} - -#[cfg(not(feature = "std"))] -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_enum { - () => { - #[inline] - fn deserialize_enum<__V>(&mut self, _: &str, _: &[&str], _: __V) -> ::core::result::Result<__V::Value, Self::Error> - where __V: $crate::de::EnumVisitor - { - Err($crate::de::Error::invalid_type($crate::de::Type::Enum)) - } - }; -} - -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_helper { - (bool) => { - forward_to_deserialize_method!{deserialize_bool()} - }; - (usize) => { - forward_to_deserialize_method!{deserialize_usize()} - }; - (u8) => { - forward_to_deserialize_method!{deserialize_u8()} - }; - (u16) => { - forward_to_deserialize_method!{deserialize_u16()} - }; - (u32) => { - forward_to_deserialize_method!{deserialize_u32()} - }; - (u64) => { - forward_to_deserialize_method!{deserialize_u64()} - }; - (isize) => { - forward_to_deserialize_method!{deserialize_isize()} - }; - (i8) => { - forward_to_deserialize_method!{deserialize_i8()} - }; - (i16) => { - forward_to_deserialize_method!{deserialize_i16()} - }; - (i32) => { - forward_to_deserialize_method!{deserialize_i32()} - }; - (i64) => { - forward_to_deserialize_method!{deserialize_i64()} - }; - (f32) => { - forward_to_deserialize_method!{deserialize_f32()} - }; - (f64) => { - forward_to_deserialize_method!{deserialize_f64()} - }; - (char) => { - forward_to_deserialize_method!{deserialize_char()} - }; - (str) => { - forward_to_deserialize_method!{deserialize_str()} - }; - (string) => { - forward_to_deserialize_method!{deserialize_string()} - }; - (unit) => { - forward_to_deserialize_method!{deserialize_unit()} - }; - (option) => { - forward_to_deserialize_method!{deserialize_option()} - }; - (seq) => { - forward_to_deserialize_method!{deserialize_seq()} - }; - (seq_fixed_size) => { - forward_to_deserialize_method!{deserialize_seq_fixed_size(usize)} - }; - (bytes) => { - forward_to_deserialize_method!{deserialize_bytes()} - }; - (map) => { - forward_to_deserialize_method!{deserialize_map()} - }; - (unit_struct) => { - forward_to_deserialize_method!{deserialize_unit_struct(&'static str)} - }; - (newtype_struct) => { - forward_to_deserialize_method!{deserialize_newtype_struct(&'static str)} - }; - (tuple_struct) => { - forward_to_deserialize_method!{deserialize_tuple_struct(&'static str, usize)} - }; - (struct) => { - forward_to_deserialize_method!{deserialize_struct(&'static str, &'static [&'static str])} - }; - (struct_field) => { - forward_to_deserialize_method!{deserialize_struct_field()} - }; - (tuple) => { - forward_to_deserialize_method!{deserialize_tuple(usize)} - }; - (ignored_any) => { - forward_to_deserialize_method!{deserialize_ignored_any()} - }; - (enum) => { - forward_to_deserialize_enum!(); - }; -} - -/// Helper to forward `Deserializer` methods to `Deserializer::deserialize`. -/// Every given method ignores all arguments and forwards to `deserialize`. -/// Note that `deserialize_enum` simply returns an `Error::invalid_type`; a -/// better approach is tracked in [serde-rs/serde#521][1]. -/// -/// ```rust,ignore -/// impl Deserializer for MyDeserializer { -/// fn deserialize(&mut self, visitor: V) -> Result -/// where V: Visitor -/// { -/// /* ... */ -/// } -/// -/// forward_to_deserialize! { -/// bool usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 char str string -/// unit option seq seq_fixed_size bytes map unit_struct newtype_struct -/// tuple_struct struct struct_field tuple enum ignored_any -/// } -/// } -/// ``` -/// -/// [1]: https://github.com/serde-rs/serde/issues/521 -#[macro_export] -macro_rules! forward_to_deserialize { - ($($func:ident)*) => { - $(forward_to_deserialize_helper!{$func})* - }; -} diff --git a/third_party/rust/serde-0.8.23/src/ser/impls.rs b/third_party/rust/serde-0.8.23/src/ser/impls.rs deleted file mode 100644 index 5653a717bb06..000000000000 --- a/third_party/rust/serde-0.8.23/src/ser/impls.rs +++ /dev/null @@ -1,725 +0,0 @@ -//! Implementations for all of Rust's builtin types. Tuples implement the `Serialize` trait if they -//! have at most 16 fields. Arrays implement the `Serialize` trait if their length is 32 or less. -//! You can always forward array serialization to slice serialization, which works for any length. -//! Long tuples are best replaced by tuple structs, for which you can use `derive(Serialize)`. In -//! that case the number of fields is irrelevant. - -#[cfg(feature = "std")] -use std::borrow::Cow; -#[cfg(all(feature = "collections", not(feature = "std")))] -use collections::borrow::Cow; - -#[cfg(feature = "std")] -use std::collections::{ - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - HashMap, - HashSet, - VecDeque, -}; -#[cfg(all(feature = "collections", not(feature = "std")))] -use collections::{ - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - VecDeque, - String, - Vec, -}; - -#[cfg(all(feature = "unstable", feature = "collections"))] -use collections::enum_set::{CLike, EnumSet}; -#[cfg(all(feature = "unstable", feature = "collections"))] -use collections::borrow::ToOwned; - -use core::hash::{Hash, BuildHasher}; -#[cfg(feature = "unstable")] -use core::iter; -#[cfg(feature = "std")] -use std::net; -#[cfg(feature = "unstable")] -use core::num; -#[cfg(feature = "unstable")] -use core::ops; -#[cfg(feature = "std")] -use std::path; -#[cfg(feature = "std")] -use std::rc::Rc; -#[cfg(all(feature = "alloc", not(feature = "std")))] -use alloc::rc::Rc; -#[cfg(feature = "std")] -use std::time::Duration; - -#[cfg(feature = "std")] -use std::sync::Arc; -#[cfg(all(feature = "alloc", not(feature = "std")))] -use alloc::arc::Arc; - -#[cfg(all(feature = "alloc", not(feature = "std")))] -use alloc::boxed::Box; - -use core::marker::PhantomData; - -#[cfg(feature = "unstable")] -use core::nonzero::{NonZero, Zeroable}; - -use super::{ - Error, - Serialize, - Serializer, -}; - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! impl_visit { - ($ty:ty, $method:ident) => { - impl Serialize for $ty { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - serializer.$method(*self) - } - } - } -} - -impl_visit!(bool, serialize_bool); -impl_visit!(isize, serialize_isize); -impl_visit!(i8, serialize_i8); -impl_visit!(i16, serialize_i16); -impl_visit!(i32, serialize_i32); -impl_visit!(i64, serialize_i64); -impl_visit!(usize, serialize_usize); -impl_visit!(u8, serialize_u8); -impl_visit!(u16, serialize_u16); -impl_visit!(u32, serialize_u32); -impl_visit!(u64, serialize_u64); -impl_visit!(f32, serialize_f32); -impl_visit!(f64, serialize_f64); -impl_visit!(char, serialize_char); - -/////////////////////////////////////////////////////////////////////////////// - -impl Serialize for str { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - serializer.serialize_str(self) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for String { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (&self[..]).serialize(serializer) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -impl Serialize for Option where T: Serialize { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - match *self { - Some(ref value) => serializer.serialize_some(value), - None => serializer.serialize_none(), - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - -impl Serialize for PhantomData { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - serializer.serialize_unit_struct("PhantomData") - } -} - - -/////////////////////////////////////////////////////////////////////////////// - -impl Serialize for [T] - where T: Serialize, -{ - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let mut state = try!(serializer.serialize_seq(Some(self.len()))); - for e in self { - try!(serializer.serialize_seq_elt(&mut state, e)); - } - serializer.serialize_seq_end(state) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! array_impls { - ($len:expr) => { - impl Serialize for [T; $len] where T: Serialize { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let mut state = try!(serializer.serialize_seq_fixed_size($len)); - for e in self { - try!(serializer.serialize_seq_elt(&mut state, e)); - } - serializer.serialize_seq_end(state) - } - } - } -} - -array_impls!(0); -array_impls!(1); -array_impls!(2); -array_impls!(3); -array_impls!(4); -array_impls!(5); -array_impls!(6); -array_impls!(7); -array_impls!(8); -array_impls!(9); -array_impls!(10); -array_impls!(11); -array_impls!(12); -array_impls!(13); -array_impls!(14); -array_impls!(15); -array_impls!(16); -array_impls!(17); -array_impls!(18); -array_impls!(19); -array_impls!(20); -array_impls!(21); -array_impls!(22); -array_impls!(23); -array_impls!(24); -array_impls!(25); -array_impls!(26); -array_impls!(27); -array_impls!(28); -array_impls!(29); -array_impls!(30); -array_impls!(31); -array_impls!(32); - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! serialize_seq { - () => { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let mut state = try!(serializer.serialize_seq(Some(self.len()))); - for e in self { - try!(serializer.serialize_seq_elt(&mut state, e)); - } - serializer.serialize_seq_end(state) - } - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for BinaryHeap - where T: Serialize + Ord -{ - serialize_seq!(); -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for BTreeSet - where T: Serialize + Ord, -{ - serialize_seq!(); -} - -#[cfg(all(feature = "unstable", feature = "collections"))] -impl Serialize for EnumSet - where T: Serialize + CLike -{ - serialize_seq!(); -} - -#[cfg(feature = "std")] -impl Serialize for HashSet - where T: Serialize + Eq + Hash, - H: BuildHasher, -{ - serialize_seq!(); -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for LinkedList - where T: Serialize, -{ - serialize_seq!(); -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for Vec where T: Serialize { - serialize_seq!(); -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for VecDeque where T: Serialize { - serialize_seq!(); -} - -#[cfg(feature = "unstable")] -impl Serialize for ops::Range - where A: Serialize + Clone + iter::Step + num::One, - for<'a> &'a A: ops::Add<&'a A, Output = A>, -{ - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let len = iter::Step::steps_between(&self.start, &self.end, &A::one()); - let mut state = try!(serializer.serialize_seq(len)); - for e in self.clone() { - try!(serializer.serialize_seq_elt(&mut state, e)); - } - serializer.serialize_seq_end(state) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -impl Serialize for () { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - serializer.serialize_unit() - } -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! tuple_impls { - ($( - $TupleVisitor:ident ($len:expr, $($T:ident),+) { - $($state:pat => $idx:tt,)+ - } - )+) => { - $( - impl<$($T),+> Serialize for ($($T,)+) - where $($T: Serialize),+ - { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let mut state = try!(serializer.serialize_tuple($len)); - $( - try!(serializer.serialize_tuple_elt(&mut state, &self.$idx)); - )+ - serializer.serialize_tuple_end(state) - } - } - )+ - } -} - -tuple_impls! { - TupleVisitor1 (1, T0) { - 0 => 0, - } - TupleVisitor2 (2, T0, T1) { - 0 => 0, - 1 => 1, - } - TupleVisitor3 (3, T0, T1, T2) { - 0 => 0, - 1 => 1, - 2 => 2, - } - TupleVisitor4 (4, T0, T1, T2, T3) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - } - TupleVisitor5 (5, T0, T1, T2, T3, T4) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - } - TupleVisitor6 (6, T0, T1, T2, T3, T4, T5) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - } - TupleVisitor7 (7, T0, T1, T2, T3, T4, T5, T6) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - } - TupleVisitor8 (8, T0, T1, T2, T3, T4, T5, T6, T7) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - } - TupleVisitor9 (9, T0, T1, T2, T3, T4, T5, T6, T7, T8) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - } - TupleVisitor10 (10, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - } - TupleVisitor11 (11, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - } - TupleVisitor12 (12, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 11 => 11, - } - TupleVisitor13 (13, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 11 => 11, - 12 => 12, - } - TupleVisitor14 (14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 11 => 11, - 12 => 12, - 13 => 13, - } - TupleVisitor15 (15, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 11 => 11, - 12 => 12, - 13 => 13, - 14 => 14, - } - TupleVisitor16 (16, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) { - 0 => 0, - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 8 => 8, - 9 => 9, - 10 => 10, - 11 => 11, - 12 => 12, - 13 => 13, - 14 => 14, - 15 => 15, - } -} - -/////////////////////////////////////////////////////////////////////////////// - -macro_rules! serialize_map { - () => { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let mut state = try!(serializer.serialize_map(Some(self.len()))); - for (k, v) in self { - try!(serializer.serialize_map_key(&mut state, k)); - try!(serializer.serialize_map_value(&mut state, v)); - } - serializer.serialize_map_end(state) - } - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl Serialize for BTreeMap - where K: Serialize + Ord, - V: Serialize, -{ - serialize_map!(); -} - -#[cfg(feature = "std")] -impl Serialize for HashMap - where K: Serialize + Eq + Hash, - V: Serialize, - H: BuildHasher, -{ - serialize_map!(); -} - -/////////////////////////////////////////////////////////////////////////////// - -impl<'a, T: ?Sized> Serialize for &'a T where T: Serialize { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (**self).serialize(serializer) - } -} - -impl<'a, T: ?Sized> Serialize for &'a mut T where T: Serialize { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (**self).serialize(serializer) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl Serialize for Box where T: Serialize { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (**self).serialize(serializer) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl Serialize for Rc where T: Serialize, { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (**self).serialize(serializer) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl Serialize for Arc where T: Serialize, { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (**self).serialize(serializer) - } -} - -#[cfg(any(feature = "std", feature = "collections"))] -impl<'a, T: ?Sized> Serialize for Cow<'a, T> where T: Serialize + ToOwned, { - #[inline] - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - (**self).serialize(serializer) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -impl Serialize for Result where T: Serialize, E: Serialize { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { - match *self { - Result::Ok(ref value) => { - serializer.serialize_newtype_variant("Result", 0, "Ok", value) - } - Result::Err(ref value) => { - serializer.serialize_newtype_variant("Result", 1, "Err", value) - } - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -impl Serialize for Duration { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - let mut state = try!(serializer.serialize_struct("Duration", 2)); - try!(serializer.serialize_struct_elt(&mut state, "secs", self.as_secs())); - try!(serializer.serialize_struct_elt(&mut state, "nanos", self.subsec_nanos())); - serializer.serialize_struct_end(state) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -impl Serialize for net::IpAddr { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - self.to_string().serialize(serializer) - } -} - -#[cfg(feature = "std")] -impl Serialize for net::Ipv4Addr { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - self.to_string().serialize(serializer) - } -} - -#[cfg(feature = "std")] -impl Serialize for net::Ipv6Addr { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - self.to_string().serialize(serializer) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -impl Serialize for net::SocketAddr { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - match *self { - net::SocketAddr::V4(ref addr) => addr.serialize(serializer), - net::SocketAddr::V6(ref addr) => addr.serialize(serializer), - } - } -} - -#[cfg(feature = "std")] -impl Serialize for net::SocketAddrV4 { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - self.to_string().serialize(serializer) - } -} - -#[cfg(feature = "std")] -impl Serialize for net::SocketAddrV6 { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - self.to_string().serialize(serializer) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -#[cfg(feature = "std")] -impl Serialize for path::Path { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - match self.to_str() { - Some(s) => s.serialize(serializer), - None => Err(Error::invalid_value("Path contains invalid UTF-8 characters")), - } - } -} - -#[cfg(feature = "std")] -impl Serialize for path::PathBuf { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer, - { - self.as_path().serialize(serializer) - } -} - -#[cfg(feature = "unstable")] -impl Serialize for NonZero where T: Serialize + Zeroable { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { - (**self).serialize(serializer) - } -} diff --git a/third_party/rust/serde-0.8.23/src/ser/mod.rs b/third_party/rust/serde-0.8.23/src/ser/mod.rs deleted file mode 100644 index ab903b2fd59a..000000000000 --- a/third_party/rust/serde-0.8.23/src/ser/mod.rs +++ /dev/null @@ -1,412 +0,0 @@ -//! Generic serialization framework. -//! # For Developers who want to serialize objects -//! Implement the `Serialize` trait for the type of objects you want to serialize. Call methods of -//! the `serializer` object. For which methods to call and how to do so, look at the documentation -//! of the `Serializer` trait. -//! -//! # For Serialization Format Developers -//! Implement the `Serializer` trait for a structure that contains fields that enable it to write -//! the serialization result to your target. When a method's argument is an object of type -//! `Serialize`, you can either forward the serializer object (`self`) or create a new one, -//! depending on the quirks of your format. - -#[cfg(feature = "std")] -use std::error; -#[cfg(not(feature = "std"))] -use error; - -#[cfg(all(feature = "collections", not(feature = "std")))] -use collections::String; - -pub mod impls; - -/////////////////////////////////////////////////////////////////////////////// - -/// `Error` is a trait that allows a `Serialize` to generically create a -/// `Serializer` error. -pub trait Error: Sized + error::Error { - /// Raised when there is a general error when serializing a type. - #[cfg(any(feature = "std", feature = "collections"))] - fn custom>(msg: T) -> Self; - - /// Raised when there is a general error when serializing a type. - #[cfg(all(not(feature = "std"), not(feature = "collections")))] - fn custom>(msg: T) -> Self; - - /// Raised when a `Serialize` was passed an incorrect value. - fn invalid_value(msg: &str) -> Self { - Error::custom(format!("invalid value: {}", msg)) - } -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A trait that describes a type that can be serialized by a `Serializer`. -pub trait Serialize { - /// Serializes this value into this serializer. - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> - where S: Serializer; -} - -/////////////////////////////////////////////////////////////////////////////// - -/// A trait that describes a type that can serialize a stream of values into the underlying format. -/// -/// # For `Serialize` Developers -/// Non-aggrergate types like integers and strings can be serialized directly by calling the -/// appropriate function. For Aggregate types there's an initial `serialize_T` method that yields -/// a State object that you should not interact with. For each part of the aggregate there's a -/// `serialize_T_elt` method that allows you to pass values or key/value pairs. The types of the -/// values or the keys may change between calls, but the serialization format may not necessarily -/// accept it. The `serialize_T_elt` method also takes a mutable reference to the state object. -/// Make sure that you always use the same state object and only the state object that was returned -/// by the `serialize_T` method. Finally, when your object is done, call the `serialize_T_end` -/// method and pass the state object by value -/// -/// # For Serialization Format Developers -/// If your format has different situations where it accepts different types, create a -/// `Serializer` for each situation. You can create the sub-`Serializer` in one of the aggregate -/// `serialize_T` methods and return it as a state object. Remember to also set the corresponding -/// associated type `TState`. In the `serialize_T_elt` methods you will be given a mutable -/// reference to that state. You do not need to do any additional checks for the correctness of the -/// state object, as it is expected that the user will not modify it. Due to the generic nature -/// of the `Serialize` impls, modifying the object is impossible on stable Rust. -pub trait Serializer { - /// The error type that can be returned if some error occurs during serialization. - type Error: Error; - - /// A state object that is initialized by `serialize_seq`, passed to - /// `serialize_seq_elt`, and consumed by `serialize_seq_end`. Use `()` if no - /// state is required. - type SeqState; - /// A state object that is initialized by `serialize_tuple`, passed to - /// `serialize_tuple_elt`, and consumed by `serialize_tuple_end`. Use `()` - /// if no state is required. - type TupleState; - /// A state object that is initialized by `serialize_tuple_struct`, passed - /// to `serialize_tuple_struct_elt`, and consumed by - /// `serialize_tuple_struct_end`. Use `()` if no state is required. - type TupleStructState; - /// A state object that is initialized by `serialize_tuple_variant`, passed - /// to `serialize_tuple_variant_elt`, and consumed by - /// `serialize_tuple_variant_end`. Use `()` if no state is required. - type TupleVariantState; - /// A state object that is initialized by `serialize_map`, passed to - /// `serialize_map_elt`, and consumed by `serialize_map_end`. Use `()` if no - /// state is required. - type MapState; - /// A state object that is initialized by `serialize_struct`, passed to - /// `serialize_struct_elt`, and consumed by `serialize_struct_end`. Use `()` - /// if no state is required. - type StructState; - /// A state object that is initialized by `serialize_struct_variant`, passed - /// to `serialize_struct_variant_elt`, and consumed by - /// `serialize_struct_variant_end`. Use `()` if no state is required. - type StructVariantState; - - /// Serializes a `bool` value. - fn serialize_bool(&mut self, v: bool) -> Result<(), Self::Error>; - - /// Serializes an `isize` value. If the format does not differentiate - /// between `isize` and `i64`, a reasonable implementation would be to cast - /// the value to `i64` and forward to `serialize_i64`. - fn serialize_isize(&mut self, v: isize) -> Result<(), Self::Error>; - - /// Serializes an `i8` value. If the format does not differentiate between - /// `i8` and `i64`, a reasonable implementation would be to cast the value - /// to `i64` and forward to `serialize_i64`. - fn serialize_i8(&mut self, v: i8) -> Result<(), Self::Error>; - - /// Serializes an `i16` value. If the format does not differentiate between - /// `i16` and `i64`, a reasonable implementation would be to cast the value - /// to `i64` and forward to `serialize_i64`. - fn serialize_i16(&mut self, v: i16) -> Result<(), Self::Error>; - - /// Serializes an `i32` value. If the format does not differentiate between - /// `i32` and `i64`, a reasonable implementation would be to cast the value - /// to `i64` and forward to `serialize_i64`. - fn serialize_i32(&mut self, v: i32) -> Result<(), Self::Error>; - - /// Serializes an `i64` value. - fn serialize_i64(&mut self, v: i64) -> Result<(), Self::Error>; - - /// Serializes a `usize` value. If the format does not differentiate between - /// `usize` and `u64`, a reasonable implementation would be to cast the - /// value to `u64` and forward to `serialize_u64`. - fn serialize_usize(&mut self, v: usize) -> Result<(), Self::Error>; - - /// Serializes a `u8` value. If the format does not differentiate between - /// `u8` and `u64`, a reasonable implementation would be to cast the value - /// to `u64` and forward to `serialize_u64`. - fn serialize_u8(&mut self, v: u8) -> Result<(), Self::Error>; - - /// Serializes a `u16` value. If the format does not differentiate between - /// `u16` and `u64`, a reasonable implementation would be to cast the value - /// to `u64` and forward to `serialize_u64`. - fn serialize_u16(&mut self, v: u16) -> Result<(), Self::Error>; - - /// Serializes a `u32` value. If the format does not differentiate between - /// `u32` and `u64`, a reasonable implementation would be to cast the value - /// to `u64` and forward to `serialize_u64`. - fn serialize_u32(&mut self, v: u32) -> Result<(), Self::Error>; - - /// `Serializes a `u64` value. - fn serialize_u64(&mut self, v: u64) -> Result<(), Self::Error>; - - /// Serializes an `f32` value. If the format does not differentiate between - /// `f32` and `f64`, a reasonable implementation would be to cast the value - /// to `f64` and forward to `serialize_f64`. - fn serialize_f32(&mut self, v: f32) -> Result<(), Self::Error>; - - /// Serializes an `f64` value. - fn serialize_f64(&mut self, v: f64) -> Result<(), Self::Error>; - - /// Serializes a character. If the format does not support characters, - /// it is reasonable to serialize it as a single element `str` or a `u32`. - fn serialize_char(&mut self, v: char) -> Result<(), Self::Error>; - - /// Serializes a `&str`. - fn serialize_str(&mut self, value: &str) -> Result<(), Self::Error>; - - /// Enables serializers to serialize byte slices more compactly or more - /// efficiently than other types of slices. If no efficient implementation - /// is available, a reasonable implementation would be to forward to - /// `serialize_seq`. If forwarded, the implementation looks usually just like this: - /// ```rust - /// let mut state = try!(self.serialize_seq(value)); - /// for b in value { - /// try!(self.serialize_seq_elt(&mut state, b)); - /// } - /// self.serialize_seq_end(state) - /// ``` - fn serialize_bytes(&mut self, value: &[u8]) -> Result<(), Self::Error>; - - /// Serializes a `()` value. It's reasonable to just not serialize anything. - fn serialize_unit(&mut self) -> Result<(), Self::Error>; - - /// Serializes a unit struct value. A reasonable implementation would be to - /// forward to `serialize_unit`. - fn serialize_unit_struct( - &mut self, - name: &'static str, - ) -> Result<(), Self::Error>; - - /// Serializes a unit variant, otherwise known as a variant with no - /// arguments. A reasonable implementation would be to forward to - /// `serialize_unit`. - fn serialize_unit_variant( - &mut self, - name: &'static str, - variant_index: usize, - variant: &'static str, - ) -> Result<(), Self::Error>; - - /// Allows a tuple struct with a single element, also known as a newtype - /// struct, to be more efficiently serialized than a tuple struct with - /// multiple items. A reasonable implementation would be to forward to - /// `serialize_tuple_struct` or to just serialize the inner value without wrapping. - fn serialize_newtype_struct( - &mut self, - name: &'static str, - value: T, - ) -> Result<(), Self::Error>; - - /// Allows a variant with a single item to be more efficiently serialized - /// than a variant with multiple items. A reasonable implementation would be - /// to forward to `serialize_tuple_variant`. - fn serialize_newtype_variant( - &mut self, - name: &'static str, - variant_index: usize, - variant: &'static str, - value: T, - ) -> Result<(), Self::Error>; - - /// Serializes a `None` value. - fn serialize_none(&mut self) -> Result<(), Self::Error>; - - /// Serializes a `Some(...)` value. - fn serialize_some( - &mut self, - value: T, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a sequence. This call must be followed by zero or - /// more calls to `serialize_seq_elt`, then a call to `serialize_seq_end`. - fn serialize_seq( - &mut self, - len: Option, - ) -> Result; - - /// Serializes a sequence element. Must have previously called - /// `serialize_seq`. - fn serialize_seq_elt( - &mut self, - state: &mut Self::SeqState, - value: T, - ) -> Result<(), Self::Error>; - - /// Finishes serializing a sequence. - fn serialize_seq_end( - &mut self, - state: Self::SeqState, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a sequence whose length will be known at - /// deserialization time. This call must be followed by zero or more calls - /// to `serialize_seq_elt`, then a call to `serialize_seq_end`. A reasonable - /// implementation would be to forward to `serialize_seq`. - fn serialize_seq_fixed_size( - &mut self, - size: usize, - ) -> Result; - - /// Begins to serialize a tuple. This call must be followed by zero or more - /// calls to `serialize_tuple_elt`, then a call to `serialize_tuple_end`. A - /// reasonable implementation would be to forward to `serialize_seq`. - fn serialize_tuple( - &mut self, - len: usize, - ) -> Result; - - /// Serializes a tuple element. Must have previously called - /// `serialize_tuple`. - fn serialize_tuple_elt( - &mut self, - state: &mut Self::TupleState, - value: T, - ) -> Result<(), Self::Error>; - - /// Finishes serializing a tuple. - fn serialize_tuple_end( - &mut self, - state: Self::TupleState, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a tuple struct. This call must be followed by zero - /// or more calls to `serialize_tuple_struct_elt`, then a call to - /// `serialize_tuple_struct_end`. A reasonable implementation would be to - /// forward to `serialize_tuple`. - fn serialize_tuple_struct( - &mut self, - name: &'static str, - len: usize, - ) -> Result; - - /// Serializes a tuple struct element. Must have previously called - /// `serialize_tuple_struct`. - fn serialize_tuple_struct_elt( - &mut self, - state: &mut Self::TupleStructState, - value: T, - ) -> Result<(), Self::Error>; - - /// Finishes serializing a tuple struct. - fn serialize_tuple_struct_end( - &mut self, - state: Self::TupleStructState, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a tuple variant. This call must be followed by zero - /// or more calls to `serialize_tuple_variant_elt`, then a call to - /// `serialize_tuple_variant_end`. A reasonable implementation would be to - /// forward to `serialize_tuple_struct`. - fn serialize_tuple_variant( - &mut self, - name: &'static str, - variant_index: usize, - variant: &'static str, - len: usize, - ) -> Result; - - /// Serializes a tuple variant element. Must have previously called - /// `serialize_tuple_variant`. - fn serialize_tuple_variant_elt( - &mut self, - state: &mut Self::TupleVariantState, - value: T, - ) -> Result<(), Self::Error>; - - /// Finishes serializing a tuple variant. - fn serialize_tuple_variant_end( - &mut self, - state: Self::TupleVariantState, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a map. This call must be followed by zero or more - /// calls to `serialize_map_key` and `serialize_map_value`, then a call to - /// `serialize_map_end`. - fn serialize_map( - &mut self, - len: Option, - ) -> Result; - - /// Serialize a map key. Must have previously called `serialize_map`. - fn serialize_map_key( - &mut self, - state: &mut Self::MapState, - key: T - ) -> Result<(), Self::Error>; - - /// Serialize a map value. Must have previously called `serialize_map`. - fn serialize_map_value( - &mut self, - state: &mut Self::MapState, - value: T - ) -> Result<(), Self::Error>; - - /// Finishes serializing a map. - fn serialize_map_end( - &mut self, - state: Self::MapState, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a struct. This call must be followed by zero or more - /// calls to `serialize_struct_elt`, then a call to `serialize_struct_end`. - fn serialize_struct( - &mut self, - name: &'static str, - len: usize, - ) -> Result; - - /// Serializes a struct field. Must have previously called - /// `serialize_struct`. - fn serialize_struct_elt( - &mut self, - state: &mut Self::StructState, - key: &'static str, - value: V, - ) -> Result<(), Self::Error>; - - /// Finishes serializing a struct. - fn serialize_struct_end( - &mut self, - state: Self::StructState, - ) -> Result<(), Self::Error>; - - /// Begins to serialize a struct variant. This call must be followed by zero - /// or more calls to `serialize_struct_variant_elt`, then a call to - /// `serialize_struct_variant_end`. - fn serialize_struct_variant( - &mut self, - name: &'static str, - variant_index: usize, - variant: &'static str, - len: usize, - ) -> Result; - - /// Serialize a struct variant element. Must have previously called - /// `serialize_struct_variant`. - fn serialize_struct_variant_elt( - &mut self, - state: &mut Self::StructVariantState, - key: &'static str, - value: V, - ) -> Result<(), Self::Error>; - - /// Finishes serializing a struct variant. - fn serialize_struct_variant_end( - &mut self, - state: Self::StructVariantState, - ) -> Result<(), Self::Error>; -} diff --git a/third_party/rust/serde-0.8.23/src/utils.rs b/third_party/rust/serde-0.8.23/src/utils.rs deleted file mode 100644 index 708eb42744d2..000000000000 --- a/third_party/rust/serde-0.8.23/src/utils.rs +++ /dev/null @@ -1,72 +0,0 @@ -//! Private utility functions - -const TAG_CONT: u8 = 0b1000_0000; -const TAG_TWO_B: u8 = 0b1100_0000; -const TAG_THREE_B: u8 = 0b1110_0000; -const TAG_FOUR_B: u8 = 0b1111_0000; -const MAX_ONE_B: u32 = 0x80; -const MAX_TWO_B: u32 = 0x800; -const MAX_THREE_B: u32 = 0x10000; - -#[inline] -pub fn encode_utf8(c: char) -> EncodeUtf8 { - let code = c as u32; - let mut buf = [0; 4]; - let pos = if code < MAX_ONE_B { - buf[3] = code as u8; - 3 - } else if code < MAX_TWO_B { - buf[2] = (code >> 6 & 0x1F) as u8 | TAG_TWO_B; - buf[3] = (code & 0x3F) as u8 | TAG_CONT; - 2 - } else if code < MAX_THREE_B { - buf[1] = (code >> 12 & 0x0F) as u8 | TAG_THREE_B; - buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT; - buf[3] = (code & 0x3F) as u8 | TAG_CONT; - 1 - } else { - buf[0] = (code >> 18 & 0x07) as u8 | TAG_FOUR_B; - buf[1] = (code >> 12 & 0x3F) as u8 | TAG_CONT; - buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT; - buf[3] = (code & 0x3F) as u8 | TAG_CONT; - 0 - }; - EncodeUtf8 { buf: buf, pos: pos } -} - -pub struct EncodeUtf8 { - buf: [u8; 4], - pos: usize, -} - -impl EncodeUtf8 { - // FIXME: use this from_utf8_unchecked, since we know it can never fail - pub fn as_str(&self) -> &str { - ::core::str::from_utf8(&self.buf[self.pos..]).unwrap() - } -} - -#[allow(non_upper_case_globals)] -const Pattern_White_Space_table: &'static [(char, char)] = &[ - ('\u{9}', '\u{d}'), ('\u{20}', '\u{20}'), ('\u{85}', '\u{85}'), ('\u{200e}', '\u{200f}'), - ('\u{2028}', '\u{2029}') -]; - -fn bsearch_range_table(c: char, r: &'static [(char, char)]) -> bool { - use core::cmp::Ordering::{Equal, Less, Greater}; - r.binary_search_by(|&(lo, hi)| { - if c < lo { - Greater - } else if hi < c { - Less - } else { - Equal - } - }) - .is_ok() -} - -#[allow(non_snake_case)] -pub fn Pattern_White_Space(c: char) -> bool { - bsearch_range_table(c, Pattern_White_Space_table) -} diff --git a/third_party/rust/serde_codegen/.cargo-checksum.json b/third_party/rust/serde_codegen/.cargo-checksum.json index 66719cae68f6..6444a7756668 100644 --- a/third_party/rust/serde_codegen/.cargo-checksum.json +++ b/third_party/rust/serde_codegen/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","Cargo.toml":"b16e3c93d139c09eb72a661a4201661c3c57ccca250a928a2ebc29f587d92540","src/bound.rs":"d1f94299052acaeeae0c011c2304b072dec76c7c32469d2b8881c2e380346496","src/de.rs":"a16c27918c973463427faaa98a7e7bd156c828bac4b96d605c30f82dad347476","src/lib.rs":"3ce6c8c8445b9f0987472477586c26281dd129f7dd9af4fd0a99d51bdfb65782","src/ser.rs":"5b86cf6b0b7941d3d82f3ed32cd26b845c821558f086fe9d7237f0ff1e066e61"},"package":"a4c5d8a33087d8984f9535daa62a6498a08f6476050b00ab9339dd847e4c25cc"} \ No newline at end of file +{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","Cargo.toml":"dea9bd4a6e93fc97a4ba26460497c35d3225c4c935f84c5a559094768c25f616","src/bound.rs":"d1f94299052acaeeae0c011c2304b072dec76c7c32469d2b8881c2e380346496","src/de.rs":"c1a4060eeb40de7ac96828cf35dc538ee0df7ba501388092f7e75d31542b11ba","src/lib.rs":"47db5228d2bc20d2d1d2403323de3ad4578f95b9baa5495aa7a095a2eae525dd","src/ser.rs":"361cd76e182d8ddb60560aab7a648dd012673b89e1090b59ff9565ec3c54143c"},"package":"1f94de585a73dfc312ca77194209278a587bf90d3edc6c2d0fc479b0ed71d1f0"} \ No newline at end of file diff --git a/third_party/rust/serde_codegen/Cargo.toml b/third_party/rust/serde_codegen/Cargo.toml index 525698131158..9c51a71f4d84 100644 --- a/third_party/rust/serde_codegen/Cargo.toml +++ b/third_party/rust/serde_codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "serde_codegen" -version = "0.8.23" +version = "0.9.0" authors = ["Erick Tryzelaar "] license = "MIT/Apache-2.0" description = "Macros to auto-generate implementations for the serde framework" @@ -27,3 +27,6 @@ serde_codegen_internals = { version = "=0.11.3", default-features = false, path syn = { version = "0.10", features = ["aster", "visit"] } syntex = { version = "^0.54.0", optional = true } syntex_syntax = { version = "^0.54.0", optional = true } + +[badges] +travis-ci = { repository = "serde-rs/serde" } diff --git a/third_party/rust/serde_codegen/src/de.rs b/third_party/rust/serde_codegen/src/de.rs index 877b6a05289d..e73193b0f23d 100644 --- a/third_party/rust/serde_codegen/src/de.rs +++ b/third_party/rust/serde_codegen/src/de.rs @@ -1,4 +1,4 @@ -use syn::{self, aster}; +use syn::{self, aster, Ident}; use quote::{self, Tokens}; use bound; @@ -28,16 +28,16 @@ pub fn expand_derive_deserialize(item: &syn::MacroInput) -> Result(deserializer: &mut __D) -> ::std::result::Result<#ty, __D::Error> - where __D: _serde::de::Deserializer + impl #impl_generics _serde::Deserialize for #ty #where_clause { + fn deserialize<__D>(deserializer: __D) -> _serde::export::Result<#ty, __D::Error> + where __D: _serde::Deserializer #body } }; @@ -61,7 +61,7 @@ fn build_impl_generics(item: &Item) -> syn::Generics { None => { let generics = bound::with_bound(item, &generics, needs_deserialize_bound, - &aster::path().ids(&["_serde", "de", "Deserialize"]).build()); + &aster::path().ids(&["_serde", "Deserialize"]).build()); bound::with_bound(item, &generics, requires_default, &aster::path().global().ids(&["std", "default", "Default"]).build()) @@ -158,11 +158,11 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) { let phantom_types = generics.lifetimes.iter() .map(|lifetime_def| { let lifetime = &lifetime_def.lifetime; - quote!(::std::marker::PhantomData<& #lifetime ()>) + quote!(_serde::export::PhantomData<& #lifetime ()>) }).chain(generics.ty_params.iter() .map(|ty_param| { let ident = &ty_param.ident; - quote!(::std::marker::PhantomData<#ident>) + quote!(_serde::export::PhantomData<#ident>) })); let all_params = generics.lifetimes.iter() @@ -175,20 +175,14 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) { quote!(#ident) })); - let ty_param_idents: Vec<_> = generics.ty_params.iter() - .map(|t| { - let ident = &t.ident; - quote!(#ident) - }) - .collect(); - - let ty_param_idents = if ty_param_idents.is_empty() { + let ty_param_idents = if generics.ty_params.is_empty() { None } else { + let ty_param_idents = generics.ty_params.iter().map(|t| &t.ident); Some(quote!(::<#(#ty_param_idents),*>)) }; - let phantom_exprs = iter::repeat(quote!(::std::marker::PhantomData)).take(num_phantoms); + let phantom_exprs = iter::repeat(quote!(_serde::export::PhantomData)).take(num_phantoms); ( quote! { @@ -206,25 +200,30 @@ fn deserialize_unit_struct( ) -> Tokens { let type_name = item_attrs.name().deserialize_name(); + let expecting = format!("unit struct {}", type_ident); + quote!({ struct __Visitor; impl _serde::de::Visitor for __Visitor { type Value = #type_ident; + fn expecting(&self, formatter: &mut _serde::export::fmt::Formatter) -> _serde::export::fmt::Result { + formatter.write_str(#expecting) + } + #[inline] - fn visit_unit<__E>(&mut self) -> ::std::result::Result<#type_ident, __E> + fn visit_unit<__E>(self) -> _serde::export::Result<#type_ident, __E> where __E: _serde::de::Error, { Ok(#type_ident) } #[inline] - fn visit_seq<__V>(&mut self, mut visitor: __V) -> ::std::result::Result<#type_ident, __V::Error> + fn visit_seq<__V>(self, _: __V) -> _serde::export::Result<#type_ident, __V::Error> where __V: _serde::de::SeqVisitor, { - try!(visitor.end()); - self.visit_unit() + Ok(#type_ident) } } @@ -249,6 +248,10 @@ fn deserialize_tuple( Some(variant_ident) => quote!(#type_ident::#variant_ident), None => quote!(#type_ident), }; + let expecting = match variant_ident { + Some(variant_ident) => format!("tuple variant {}::{}", type_ident, variant_ident), + None => format!("tuple struct {}", type_ident), + }; let nfields = fields.len(); @@ -272,7 +275,7 @@ fn deserialize_tuple( ); let dispatch = if is_enum { - quote!(visitor.visit_tuple(#nfields, #visitor_expr)) + quote!(_serde::de::VariantVisitor::visit_tuple(visitor, #nfields, #visitor_expr)) } else if nfields == 1 { let type_name = item_attrs.name().deserialize_name(); quote!(deserializer.deserialize_newtype_struct(#type_name, #visitor_expr)) @@ -281,16 +284,27 @@ fn deserialize_tuple( quote!(deserializer.deserialize_tuple_struct(#type_name, #nfields, #visitor_expr)) }; + let all_skipped = fields.iter().all(|field| field.attrs.skip_deserializing()); + let visitor_var = if all_skipped { + quote!(_) + } else { + quote!(mut visitor) + }; + quote!({ #visitor_item impl #impl_generics _serde::de::Visitor for #visitor_ty #where_clause { type Value = #ty; + fn expecting(&self, formatter: &mut _serde::export::fmt::Formatter) -> _serde::export::fmt::Result { + formatter.write_str(#expecting) + } + #visit_newtype_struct #[inline] - fn visit_seq<__V>(&mut self, mut visitor: __V) -> ::std::result::Result<#ty, __V::Error> + fn visit_seq<__V>(self, #visitor_var: __V) -> _serde::export::Result<#ty, __V::Error> where __V: _serde::de::SeqVisitor { #visit_seq @@ -308,15 +322,20 @@ fn deserialize_seq( fields: &[Field], is_struct: bool, ) -> Tokens { + let vars = (0..fields.len()).map(field_i as fn(_) -> _); + + let deserialized_count = fields.iter() + .filter(|field| !field.attrs.skip_deserializing()) + .count(); + let expecting = format!("tuple of {} elements", deserialized_count); + let mut index_in_seq = 0usize; - let let_values: Vec<_> = fields.iter() - .enumerate() - .map(|(i, field)| { - let name = aster::id(format!("__field{}", i)); + let let_values = vars.clone().zip(fields) + .map(|(var, field)| { if field.attrs.skip_deserializing() { let default = expr_is_missing(&field.attrs); quote! { - let #name = #default; + let #var = #default; } } else { let visit = match field.attrs.deserialize_with() { @@ -335,43 +354,31 @@ fn deserialize_seq( } }; let assign = quote! { - let #name = match #visit { + let #var = match #visit { Some(value) => { value }, None => { - try!(visitor.end()); - return Err(_serde::de::Error::invalid_length(#index_in_seq)); + return Err(_serde::de::Error::invalid_length(#index_in_seq, &#expecting)); } }; }; index_in_seq += 1; assign } - }) - .collect(); + }); let result = if is_struct { - let args = fields.iter() - .enumerate() - .map(|(i, field)| { - let ident = field.ident.clone().expect("struct contains unnamed fields"); - let value = aster::id(format!("__field{}", i)); - quote!(#ident: #value) - }); + let names = fields.iter().map(|f| &f.ident); quote! { - #type_path { #(#args),* } + #type_path { #( #names: #vars ),* } } } else { - let args = (0..fields.len()).map(|i| aster::id(format!("__field{}", i))); quote! { - #type_path ( #(#args),* ) + #type_path ( #(#vars),* ) } }; quote! { #(#let_values)* - - try!(visitor.end()); - Ok(#result) } } @@ -401,8 +408,8 @@ fn deserialize_newtype_struct( }; quote! { #[inline] - fn visit_newtype_struct<__E>(&mut self, __e: &mut __E) -> ::std::result::Result - where __E: _serde::de::Deserializer, + fn visit_newtype_struct<__E>(self, __e: __E) -> _serde::export::Result + where __E: _serde::Deserializer, { Ok(#type_path(#value)) } @@ -425,6 +432,10 @@ fn deserialize_struct( Some(variant_ident) => quote!(#type_ident::#variant_ident), None => quote!(#type_ident), }; + let expecting = match variant_ident { + Some(variant_ident) => format!("struct variant {}::{}", type_ident, variant_ident), + None => format!("struct {}", type_ident), + }; let visit_seq = deserialize_seq( type_ident, @@ -445,7 +456,7 @@ fn deserialize_struct( let is_enum = variant_ident.is_some(); let dispatch = if is_enum { quote! { - visitor.visit_struct(FIELDS, #visitor_expr) + _serde::de::VariantVisitor::visit_struct(visitor, FIELDS, #visitor_expr) } } else { let type_name = item_attrs.name().deserialize_name(); @@ -454,6 +465,13 @@ fn deserialize_struct( } }; + let all_skipped = fields.iter().all(|field| field.attrs.skip_deserializing()); + let visitor_var = if all_skipped { + quote!(_) + } else { + quote!(mut visitor) + }; + quote!({ #field_visitor @@ -462,15 +480,19 @@ fn deserialize_struct( impl #impl_generics _serde::de::Visitor for #visitor_ty #where_clause { type Value = #ty; + fn expecting(&self, formatter: &mut _serde::export::fmt::Formatter) -> _serde::export::fmt::Result { + formatter.write_str(#expecting) + } + #[inline] - fn visit_seq<__V>(&mut self, mut visitor: __V) -> ::std::result::Result<#ty, __V::Error> + fn visit_seq<__V>(self, #visitor_var: __V) -> _serde::export::Result<#ty, __V::Error> where __V: _serde::de::SeqVisitor { #visit_seq } #[inline] - fn visit_map<__V>(&mut self, mut visitor: __V) -> ::std::result::Result<#ty, __V::Error> + fn visit_map<__V>(self, mut visitor: __V) -> _serde::export::Result<#ty, __V::Error> where __V: _serde::de::MapVisitor { #visit_map @@ -494,49 +516,64 @@ fn deserialize_item_enum( let type_name = item_attrs.name().deserialize_name(); + let expecting = format!("enum {}", type_ident); + + let variant_names_idents: Vec<_> = variants.iter() + .enumerate() + .filter(|&(_, variant)| !variant.attrs.skip_deserializing()) + .map(|(i, variant)| (variant.attrs.name().deserialize_name(), field_i(i))) + .collect(); + + let variants_stmt = { + let variant_names = variant_names_idents.iter().map(|&(ref name, _)| name); + quote! { + const VARIANTS: &'static [&'static str] = &[ #(#variant_names),* ]; + } + }; + let variant_visitor = deserialize_field_visitor( - variants.iter() - .filter(|variant| !variant.attrs.skip_deserializing()) - .map(|variant| variant.attrs.name().deserialize_name()) - .collect(), + variant_names_idents, item_attrs, true, ); - let variant_names = variants.iter().map(|variant| variant.ident.to_string()); - - let variants_stmt = quote! { - const VARIANTS: &'static [&'static str] = &[ #(#variant_names),* ]; - }; - - let ignored_arm = if item_attrs.deny_unknown_fields() { - None - } else { - Some(quote! { - __Field::__ignore => { Err(_serde::de::Error::end_of_stream()) } - }) - }; - // Match arms to extract a variant from a string - let mut variant_arms = vec![]; - for (i, variant) in variants.iter().filter(|variant| !variant.attrs.skip_deserializing()).enumerate() { - let variant_name = aster::id(format!("__field{}", i)); - let variant_name = quote!(__Field::#variant_name); + let variant_arms = variants.iter() + .enumerate() + .filter(|&(_, variant)| !variant.attrs.skip_deserializing()) + .map(|(i, variant)| { + let variant_name = field_i(i); - let block = deserialize_variant( - type_ident, - impl_generics, - ty.clone(), - variant, - item_attrs, - ); + let block = deserialize_variant( + type_ident, + impl_generics, + ty.clone(), + variant, + item_attrs, + ); - let arm = quote! { - #variant_name => #block - }; - variant_arms.push(arm); - } - variant_arms.extend(ignored_arm.into_iter()); + quote! { + (__Field::#variant_name, visitor) => #block + } + }); + + let all_skipped = variants.iter().all(|variant| variant.attrs.skip_deserializing()); + let match_variant = if all_skipped { + // This is an empty enum like `enum Impossible {}` or an enum in which + // all variants have `#[serde(skip_deserializing)]`. + quote! { + // FIXME: Once we drop support for Rust 1.15: + // let Err(err) = visitor.visit_variant::<__Field>(); + // Err(err) + visitor.visit_variant::<__Field>().map(|(impossible, _)| match impossible {}) + } + } else { + quote! { + match try!(visitor.visit_variant()) { + #(#variant_arms)* + } + } + }; let (visitor_item, visitor_ty, visitor_expr) = deserialize_visitor(impl_generics); @@ -545,15 +582,17 @@ fn deserialize_item_enum( #visitor_item - impl #impl_generics _serde::de::EnumVisitor for #visitor_ty #where_clause { + impl #impl_generics _serde::de::Visitor for #visitor_ty #where_clause { type Value = #ty; - fn visit<__V>(&mut self, mut visitor: __V) -> ::std::result::Result<#ty, __V::Error> - where __V: _serde::de::VariantVisitor, + fn expecting(&self, formatter: &mut _serde::export::fmt::Formatter) -> _serde::export::fmt::Result { + formatter.write_str(#expecting) + } + + fn visit_enum<__V>(self, visitor: __V) -> _serde::export::Result<#ty, __V::Error> + where __V: _serde::de::EnumVisitor, { - match try!(visitor.visit_variant()) { - #(#variant_arms)* - } + #match_variant } } @@ -575,7 +614,7 @@ fn deserialize_variant( match variant.style { Style::Unit => { quote!({ - try!(visitor.visit_unit()); + try!(_serde::de::VariantVisitor::visit_unit(visitor)); Ok(#type_ident::#variant_ident) }) } @@ -619,7 +658,9 @@ fn deserialize_newtype_variant( let visit = match field.attrs.deserialize_with() { None => { let field_ty = &field.ty; - quote!(try!(visitor.visit_newtype::<#field_ty>())) + quote! { + try!(_serde::de::VariantVisitor::visit_newtype::<#field_ty>(visitor)) + } } Some(path) => { let (wrapper, wrapper_impl, wrapper_ty) = wrap_deserialize_with( @@ -627,7 +668,7 @@ fn deserialize_newtype_variant( quote!({ #wrapper #wrapper_impl - try!(visitor.visit_newtype::<#wrapper_ty>()).value + try!(_serde::de::VariantVisitor::visit_newtype::<#wrapper_ty>(visitor)).value }) } }; @@ -637,105 +678,63 @@ fn deserialize_newtype_variant( } fn deserialize_field_visitor( - field_names: Vec, + fields: Vec<(String, Ident)>, item_attrs: &attr::Item, is_variant: bool, ) -> Tokens { - // Create the field names for the fields. - let field_idents: Vec<_> = (0 .. field_names.len()) - .map(|i| aster::id(format!("__field{}", i))) - .collect(); + let field_strs = fields.iter().map(|&(ref name, _)| name); + let field_bytes = fields.iter().map(|&(ref name, _)| quote::ByteStr(name)); + let field_idents: &Vec<_> = &fields.iter().map(|&(_, ref ident)| ident).collect(); - let ignore_variant = if item_attrs.deny_unknown_fields() { + let ignore_variant = if is_variant || item_attrs.deny_unknown_fields() { None } else { Some(quote!(__ignore,)) }; - let index_field_arms: Vec<_> = field_idents.iter() - .enumerate() - .map(|(field_index, field_ident)| { - quote! { - #field_index => { Ok(__Field::#field_ident) } + let visit_index = if is_variant { + let variant_indices = 0u32..; + let fallthrough_msg = format!("variant index 0 <= i < {}", fields.len()); + Some(quote! { + fn visit_u32<__E>(self, value: u32) -> _serde::export::Result<__Field, __E> + where __E: _serde::de::Error + { + match value { + #( + #variant_indices => Ok(__Field::#field_idents), + )* + _ => Err(_serde::de::Error::invalid_value( + _serde::de::Unexpected::Unsigned(value as u64), + &#fallthrough_msg)) + } } }) - .collect(); - - let (index_error_msg, unknown_ident) = if is_variant { - ("expected a variant", aster::id("unknown_variant")) } else { - ("expected a field", aster::id("unknown_field")) + None }; - let fallthrough_index_arm_expr = if !is_variant && !item_attrs.deny_unknown_fields() { + let fallthrough_arm = if is_variant { + quote! { + Err(_serde::de::Error::unknown_variant(value, VARIANTS)) + } + } else if item_attrs.deny_unknown_fields() { + quote! { + Err(_serde::de::Error::unknown_field(value, FIELDS)) + } + } else { quote! { Ok(__Field::__ignore) } - } else { - quote! { - Err(_serde::de::Error::invalid_value(#index_error_msg)) - } }; - let index_body = quote! { - match value { - #(#index_field_arms)* - _ => #fallthrough_index_arm_expr - } - }; - - // Match arms to extract a field from a string - let str_field_arms: Vec<_> = field_idents.iter().zip(field_names.iter()) - .map(|(field_ident, field_name)| { - quote! { - #field_name => { Ok(__Field::#field_ident) } - } + let bytes_to_str = if is_variant || item_attrs.deny_unknown_fields() { + Some(quote! { + // TODO https://github.com/serde-rs/serde/issues/666 + // update this to use str::from_utf8(value).unwrap_or("���") on no_std + let value = &_serde::export::from_utf8_lossy(value); }) - .collect(); - - let fallthrough_str_arm_expr = if !is_variant && !item_attrs.deny_unknown_fields() { - quote! { - Ok(__Field::__ignore) - } } else { - quote! { - Err(_serde::de::Error::#unknown_ident(value)) - } - }; - - let str_body = quote! { - match value { - #(#str_field_arms)* - _ => #fallthrough_str_arm_expr - } - }; - - // Match arms to extract a field from a string - let bytes_field_arms: Vec<_> = field_idents.iter().zip(field_names.iter()) - .map(|(field_ident, field_name)| { - let bytes_field_name = quote::ByteStr(field_name); - quote! { - #bytes_field_name => { Ok(__Field::#field_ident) } - } - }) - .collect(); - - let fallthrough_bytes_arm_expr = if !is_variant && !item_attrs.deny_unknown_fields() { - quote! { - Ok(__Field::__ignore) - } - } else { - quote!({ - let value = ::std::string::String::from_utf8_lossy(value); - Err(_serde::de::Error::#unknown_ident(&value)) - }) - }; - - let bytes_body = quote! { - match value { - #(#bytes_field_arms)* - _ => #fallthrough_bytes_arm_expr - } + None }; quote! { @@ -745,32 +744,45 @@ fn deserialize_field_visitor( #ignore_variant } - impl _serde::de::Deserialize for __Field { + impl _serde::Deserialize for __Field { #[inline] - fn deserialize<__D>(deserializer: &mut __D) -> ::std::result::Result<__Field, __D::Error> - where __D: _serde::de::Deserializer, + fn deserialize<__D>(deserializer: __D) -> _serde::export::Result<__Field, __D::Error> + where __D: _serde::Deserializer, { struct __FieldVisitor; impl _serde::de::Visitor for __FieldVisitor { type Value = __Field; - fn visit_usize<__E>(&mut self, value: usize) -> ::std::result::Result<__Field, __E> - where __E: _serde::de::Error - { - #index_body + fn expecting(&self, formatter: &mut _serde::export::fmt::Formatter) -> _serde::export::fmt::Result { + formatter.write_str("field name") } - fn visit_str<__E>(&mut self, value: &str) -> ::std::result::Result<__Field, __E> + #visit_index + + fn visit_str<__E>(self, value: &str) -> _serde::export::Result<__Field, __E> where __E: _serde::de::Error { - #str_body + match value { + #( + #field_strs => Ok(__Field::#field_idents), + )* + _ => #fallthrough_arm + } } - fn visit_bytes<__E>(&mut self, value: &[u8]) -> ::std::result::Result<__Field, __E> + fn visit_bytes<__E>(self, value: &[u8]) -> _serde::export::Result<__Field, __E> where __E: _serde::de::Error { - #bytes_body + match value { + #( + #field_bytes => Ok(__Field::#field_idents), + )* + _ => { + #bytes_to_str + #fallthrough_arm + } + } } } @@ -787,12 +799,21 @@ fn deserialize_struct_visitor( fields: &[Field], item_attrs: &attr::Item, ) -> (Tokens, Tokens, Tokens) { - let field_exprs = fields.iter() - .map(|field| field.attrs.name().deserialize_name()) + let field_names_idents: Vec<_> = fields.iter() + .enumerate() + .filter(|&(_, field)| !field.attrs.skip_deserializing()) + .map(|(i, field)| (field.attrs.name().deserialize_name(), field_i(i))) .collect(); + let fields_stmt = { + let field_names = field_names_idents.iter().map(|&(ref name, _)| name); + quote! { + const FIELDS: &'static [&'static str] = &[ #(#field_names),* ]; + } + }; + let field_visitor = deserialize_field_visitor( - field_exprs, + field_names_idents, item_attrs, false, ); @@ -805,14 +826,6 @@ fn deserialize_struct_visitor( item_attrs, ); - let field_names = fields.iter().map(|field| { - field.ident.clone().expect("struct contains unnamed field").to_string() - }); - - let fields_stmt = quote! { - const FIELDS: &'static [&'static str] = &[ #(#field_names),* ]; - }; - (field_visitor, fields_stmt, visit_map) } @@ -824,22 +837,20 @@ fn deserialize_map( item_attrs: &attr::Item, ) -> Tokens { // Create the field names for the fields. - let fields_names = fields.iter() + let fields_names: Vec<_> = fields.iter() .enumerate() - .map(|(i, field)| - (field, aster::id(format!("__field{}", i)))) - .collect::>(); + .map(|(i, field)| (field, field_i(i))) + .collect(); // Declare each field that will be deserialized. - let let_values: Vec<_> = fields_names.iter() + let let_values = fields_names.iter() .filter(|&&(field, _)| !field.attrs.skip_deserializing()) .map(|&(field, ref name)| { let field_ty = &field.ty; quote! { let mut #name: Option<#field_ty> = None; } - }) - .collect(); + }); // Match arms to extract a value for a field. let value_arms = fields_names.iter() @@ -872,21 +883,7 @@ fn deserialize_map( #name = Some(#visit); } } - }) - .collect::>(); - - // Match arms to ignore value for fields that have `skip_deserializing`. - // Ignored even if `deny_unknown_fields` is set. - let skipped_arms = fields_names.iter() - .filter(|&&(field, _)| field.attrs.skip_deserializing()) - .map(|&(_, ref name)| { - quote! { - __Field::#name => { - let _ = try!(visitor.visit_value::<_serde::de::impls::IgnoredAny>()); - } - } - }) - .collect::>(); + }); // Visit ignored values to consume them let ignored_arm = if item_attrs.deny_unknown_fields() { @@ -897,6 +894,24 @@ fn deserialize_map( }) }; + let all_skipped = fields.iter().all(|field| field.attrs.skip_deserializing()); + let match_keys = if item_attrs.deny_unknown_fields() && all_skipped { + quote! { + // FIXME: Once we drop support for Rust 1.15: + // let None::<__Field> = try!(visitor.visit_key()); + try!(visitor.visit_key::<__Field>()).map(|impossible| match impossible {}); + } + } else { + quote! { + while let Some(key) = try!(visitor.visit_key::<__Field>()) { + match key { + #(#value_arms)* + #ignored_arm + } + } + } + }; + let extract_values = fields_names.iter() .filter(|&&(field, _)| !field.attrs.skip_deserializing()) .map(|&(field, ref name)| { @@ -908,8 +923,7 @@ fn deserialize_map( None => #missing_expr }; } - }) - .collect::>(); + }); let result = fields_names.iter() .map(|&(field, ref name)| { @@ -925,15 +939,7 @@ fn deserialize_map( quote! { #(#let_values)* - while let Some(key) = try!(visitor.visit_key::<__Field>()) { - match key { - #(#value_arms)* - #(#skipped_arms)* - #ignored_arm - } - } - - try!(visitor.end()); + #match_keys #(#extract_values)* @@ -941,6 +947,10 @@ fn deserialize_map( } } +fn field_i(i: usize) -> Ident { + Ident::new(format!("__field{}", i)) +} + /// This function wraps the expression in `#[serde(deserialize_with="...")]` in /// a trait to prevent it from accessing the internal `Deserialize` state. fn wrap_deserialize_with( @@ -971,18 +981,18 @@ fn wrap_deserialize_with( quote! { struct __SerdeDeserializeWithStruct #impl_generics #where_clause { value: #field_ty, - phantom: ::std::marker::PhantomData<#phantom_ty>, + phantom: _serde::export::PhantomData<#phantom_ty>, } }, quote! { - impl #impl_generics _serde::de::Deserialize for #wrapper_ty #where_clause { - fn deserialize<__D>(__d: &mut __D) -> ::std::result::Result - where __D: _serde::de::Deserializer + impl #impl_generics _serde::Deserialize for #wrapper_ty #where_clause { + fn deserialize<__D>(__d: __D) -> _serde::export::Result + where __D: _serde::Deserializer { let value = try!(#deserialize_with(__d)); Ok(__SerdeDeserializeWithStruct { value: value, - phantom: ::std::marker::PhantomData, + phantom: _serde::export::PhantomData, }) } } @@ -994,7 +1004,7 @@ fn wrap_deserialize_with( fn expr_is_missing(attrs: &attr::Field) -> Tokens { match *attrs.default() { attr::FieldDefault::Default => { - return quote!(::std::default::Default::default()); + return quote!(_serde::export::Default::default()); } attr::FieldDefault::Path(ref path) => { return quote!(#path()); @@ -1006,7 +1016,7 @@ fn expr_is_missing(attrs: &attr::Field) -> Tokens { match attrs.deserialize_with() { None => { quote! { - try!(visitor.missing_field(#name)) + try!(_serde::de::private::missing_field(#name)) } } Some(_) => { diff --git a/third_party/rust/serde_codegen/src/lib.rs b/third_party/rust/serde_codegen/src/lib.rs index f920dda5c46c..9850fecce1c1 100644 --- a/third_party/rust/serde_codegen/src/lib.rs +++ b/third_party/rust/serde_codegen/src/lib.rs @@ -12,7 +12,6 @@ extern crate serde_codegen_internals as internals; extern crate syntex; #[cfg(feature = "with-syntex")] -#[macro_use] extern crate syntex_syntax as syntax; extern crate syn; diff --git a/third_party/rust/serde_codegen/src/ser.rs b/third_party/rust/serde_codegen/src/ser.rs index 65459abc2b73..c8efe1afa2d2 100644 --- a/third_party/rust/serde_codegen/src/ser.rs +++ b/third_party/rust/serde_codegen/src/ser.rs @@ -1,4 +1,4 @@ -use syn::{self, aster}; +use syn::{self, aster, Ident}; use quote::Tokens; use bound; @@ -22,16 +22,16 @@ pub fn expand_derive_serialize(item: &syn::MacroInput) -> Result let where_clause = &impl_generics.where_clause; - let dummy_const = aster::id(format!("_IMPL_SERIALIZE_FOR_{}", item.ident)); + let dummy_const = Ident::new(format!("_IMPL_SERIALIZE_FOR_{}", item.ident)); Ok(quote! { #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] const #dummy_const: () = { extern crate serde as _serde; #[automatically_derived] - impl #impl_generics _serde::ser::Serialize for #ty #where_clause { - fn serialize<__S>(&self, _serializer: &mut __S) -> ::std::result::Result<(), __S::Error> - where __S: _serde::ser::Serializer + impl #impl_generics _serde::Serialize for #ty #where_clause { + fn serialize<__S>(&self, _serializer: __S) -> _serde::export::Result<__S::Ok, __S::Error> + where __S: _serde::Serializer { #body } @@ -56,7 +56,7 @@ fn build_impl_generics(item: &Item) -> syn::Generics { None => { bound::with_bound(item, &generics, needs_serialize_bound, - &aster::path().ids(&["_serde", "ser", "Serialize"]).build()) + &aster::path().ids(&["_serde", "Serialize"]).build()) } } } @@ -159,7 +159,7 @@ fn serialize_tuple_struct( fields, impl_generics, false, - aster::id("serialize_tuple_struct_elt"), + quote!(_serde::ser::SerializeTupleStruct::serialize_field), ); let type_name = item_attrs.name().serialize_name(); @@ -169,7 +169,7 @@ fn serialize_tuple_struct( quote! { let #let_mut __serde_state = try!(_serializer.serialize_tuple_struct(#type_name, #len)); #(#serialize_stmts)* - _serializer.serialize_tuple_struct_end(__serde_state) + _serde::ser::SerializeTupleStruct::end(__serde_state) } } @@ -184,7 +184,7 @@ fn serialize_struct( fields, impl_generics, false, - aster::id("serialize_struct_elt"), + quote!(_serde::ser::SerializeStruct::serialize_field), ); let type_name = item_attrs.name().serialize_name(); @@ -210,7 +210,7 @@ fn serialize_struct( quote! { let #let_mut __serde_state = try!(_serializer.serialize_struct(#type_name, #len)); #(#serialize_fields)* - _serializer.serialize_struct_end(__serde_state) + _serde::ser::SerializeStruct::end(__serde_state) } } @@ -257,10 +257,10 @@ fn serialize_variant( let variant_name = variant.attrs.name().serialize_name(); if variant.attrs.skip_serializing() { - let skipped_msg = format!("The enum variant {}::{} cannot be serialized", + let skipped_msg = format!("the enum variant {}::{} cannot be serialized", type_ident, variant_ident); let skipped_err = quote! { - Err(_serde::ser::Error::invalid_value(#skipped_msg)) + Err(_serde::ser::Error::custom(#skipped_msg)) }; let fields_pat = match variant.style { Style::Unit => quote!(), @@ -275,7 +275,7 @@ fn serialize_variant( Style::Unit => { quote! { #type_ident::#variant_ident => - _serde::ser::Serializer::serialize_unit_variant( + _serde::Serializer::serialize_unit_variant( _serializer, #type_name, #variant_index, @@ -299,7 +299,7 @@ fn serialize_variant( }, Style::Tuple => { let field_names = (0 .. variant.fields.len()) - .map(|i| aster::id(format!("__field{}", i))); + .map(|i| Ident::new(format!("__field{}", i))); let block = serialize_tuple_variant( type_name, @@ -350,7 +350,7 @@ fn serialize_newtype_variant( } quote! { - _serde::ser::Serializer::serialize_newtype_variant( + _serde::Serializer::serialize_newtype_variant( _serializer, #type_name, #variant_index, @@ -373,7 +373,7 @@ fn serialize_tuple_variant( fields, generics, true, - aster::id("serialize_tuple_variant_elt"), + quote!(_serde::ser::SerializeTupleVariant::serialize_field), ); let len = serialize_stmts.len(); @@ -386,7 +386,7 @@ fn serialize_tuple_variant( #variant_name, #len)); #(#serialize_stmts)* - _serializer.serialize_tuple_variant_end(__serde_state) + _serde::ser::SerializeTupleVariant::end(__serde_state) } } @@ -403,7 +403,7 @@ fn serialize_struct_variant( fields, generics, true, - aster::id("serialize_struct_variant_elt"), + quote!(_serde::ser::SerializeStructVariant::serialize_field), ); let item_name = item_attrs.name().serialize_name(); @@ -433,7 +433,7 @@ fn serialize_struct_variant( #len, )); #(#serialize_fields)* - _serializer.serialize_struct_variant_end(__serde_state) + _serde::ser::SerializeStructVariant::end(__serde_state) } } @@ -442,16 +442,16 @@ fn serialize_tuple_struct_visitor( fields: &[Field], generics: &syn::Generics, is_enum: bool, - func: syn::Ident, + func: Tokens, ) -> Vec { fields.iter() .enumerate() .map(|(i, field)| { let mut field_expr = if is_enum { - let id = aster::id(format!("__field{}", i)); + let id = Ident::new(format!("__field{}", i)); quote!(#id) } else { - let i = aster::id(i); + let i = Ident::new(i); quote!(&self.#i) }; @@ -464,7 +464,7 @@ fn serialize_tuple_struct_visitor( } let ser = quote! { - try!(_serializer.#func(&mut __serde_state, #field_expr)); + try!(#func(&mut __serde_state, #field_expr)); }; match skip { @@ -480,7 +480,7 @@ fn serialize_struct_visitor( fields: &[Field], generics: &syn::Generics, is_enum: bool, - func: syn::Ident, + func: Tokens, ) -> Vec { fields.iter() .filter(|&field| !field.attrs.skip_serializing()) @@ -503,7 +503,7 @@ fn serialize_struct_visitor( } let ser = quote! { - try!(_serializer.#func(&mut __serde_state, #key_expr, #field_expr)); + try!(#func(&mut __serde_state, #key_expr, #field_expr)); }; match skip { @@ -540,15 +540,15 @@ fn wrap_serialize_with( phantom: ::std::marker::PhantomData<#item_ty>, } - impl #wrapper_generics _serde::ser::Serialize for #wrapper_ty #where_clause { - fn serialize<__S>(&self, __s: &mut __S) -> ::std::result::Result<(), __S::Error> - where __S: _serde::ser::Serializer + impl #wrapper_generics _serde::Serialize for #wrapper_ty #where_clause { + fn serialize<__S>(&self, __s: __S) -> _serde::export::Result<__S::Ok, __S::Error> + where __S: _serde::Serializer { #path(self.value, __s) } } - __SerializeWith { + &__SerializeWith { value: #value, phantom: ::std::marker::PhantomData::<#item_ty>, } @@ -558,7 +558,7 @@ fn wrap_serialize_with( // Serialization of an empty struct results in code like: // // let mut __serde_state = try!(serializer.serialize_struct("S", 0)); -// serializer.serialize_struct_end(__serde_state) +// _serde::ser::SerializeStruct::end(__serde_state) // // where we want to omit the `mut` to avoid a warning. fn mut_if(is_mut: bool) -> Option { diff --git a/third_party/rust/dwrote/.cargo-checksum.json b/third_party/rust/servo-dwrote/.cargo-checksum.json similarity index 81% rename from third_party/rust/dwrote/.cargo-checksum.json rename to third_party/rust/servo-dwrote/.cargo-checksum.json index e35c11bb97d4..fd594ab7f0f4 100644 --- a/third_party/rust/dwrote/.cargo-checksum.json +++ b/third_party/rust/servo-dwrote/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"172610b244a5ee8a8e2f1f045058b8abf9291d84bb76bf8779d2fd420419c2d6","Cargo.toml":"81966f2284a9e3d1a08d4dd846ae4a0e65a97c90d11d4d859ad13b00e56108f4","README.md":"d69d75705e2582721cbfb2d3b4b2af052c71679057a0b2ac53a22c03f1755bba","build.rs":"b40ce243f62825724b4a45092a8e658d71fa952a6840b83f3bee58e719a56d3b","src/bitmap_render_target.rs":"d3b229f85a9804ac52976431657727b410e7d5253283df046e46d98c196f0a3a","src/com_helpers.rs":"fccb4b36379ae3454a88aa32a8e5c09e46ef5f5626266dde1fe5f40a992de39c","src/comptr.rs":"218435689f505769686e07cfc5428852dda90b849a0d48e670f632307f5edc7c","src/font.rs":"9bdf3134c6ad3639eab3da4419c9b43aad2673797f6fdc65841da2c82e1f3af4","src/font_collection.rs":"969fa3abf141dc3504774886f4783fda4a74cd5a198c643f8a77fc1af4e75258","src/font_face.rs":"9506ca579345ab2b6b5615fc75f8f431e2bb0dbd93123d1d2a21a73c851a5427","src/font_family.rs":"403da9f8f9903cbe7f9f79636497b273f9885e200f53af99f9d4e483f11d6889","src/font_file.rs":"60ad02fc25765a2c113175ea372e98a2be0d84aa65fef9246b6a0192e63ff708","src/font_file_loader_impl.rs":"0d304ad99ff1e6874510a1498223329d798ff75b417e3db7e823a695003dfe92","src/gdi_interop.rs":"98922996afc5b8c8304cb65e7c965419003825dfa172a3e11fe69bf3d768551c","src/glyph_run_analysis.rs":"d30d8b41b047815ab5770c730b7a6d09939f2347b4a4257b87bebec08a5794fe","src/helpers.rs":"5d6f164468234ca8806dc1cea117b42dbfae80cc4c9ae965cb0556efdb364682","src/lib.rs":"77255bb083c75139180c7ba775e2d2b4d73a0d07b342aad3e8fff56b7927e1ca","src/rendering_params.rs":"be1d1c433f76926c285d8ecdb747c5d9cc6a6c10c1a1890c0760cd99755ed471","src/test.rs":"d77e45f8866abeea070cbbafd4cbde62d875292e8d191310a04c70091978547c","src/types.rs":"784235c15d61fb0d001373575169aa473c92af18dcbc1709a5b2bbaa3a7ceb22"},"package":"5998238340a4625b5e1cf52341bd330c5ad91a39a41527ed8af20f95a258a96c"} \ No newline at end of file +{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"172610b244a5ee8a8e2f1f045058b8abf9291d84bb76bf8779d2fd420419c2d6","Cargo.toml":"dea6c3d3d4b1440983aa6e3d218b52c630283c8ef52102fa5443c67d954e14f0","README.md":"d69d75705e2582721cbfb2d3b4b2af052c71679057a0b2ac53a22c03f1755bba","build.rs":"b40ce243f62825724b4a45092a8e658d71fa952a6840b83f3bee58e719a56d3b","src/bitmap_render_target.rs":"d3b229f85a9804ac52976431657727b410e7d5253283df046e46d98c196f0a3a","src/com_helpers.rs":"fccb4b36379ae3454a88aa32a8e5c09e46ef5f5626266dde1fe5f40a992de39c","src/comptr.rs":"218435689f505769686e07cfc5428852dda90b849a0d48e670f632307f5edc7c","src/font.rs":"9bdf3134c6ad3639eab3da4419c9b43aad2673797f6fdc65841da2c82e1f3af4","src/font_collection.rs":"969fa3abf141dc3504774886f4783fda4a74cd5a198c643f8a77fc1af4e75258","src/font_face.rs":"9506ca579345ab2b6b5615fc75f8f431e2bb0dbd93123d1d2a21a73c851a5427","src/font_family.rs":"403da9f8f9903cbe7f9f79636497b273f9885e200f53af99f9d4e483f11d6889","src/font_file.rs":"60ad02fc25765a2c113175ea372e98a2be0d84aa65fef9246b6a0192e63ff708","src/font_file_loader_impl.rs":"0d304ad99ff1e6874510a1498223329d798ff75b417e3db7e823a695003dfe92","src/gdi_interop.rs":"98922996afc5b8c8304cb65e7c965419003825dfa172a3e11fe69bf3d768551c","src/glyph_run_analysis.rs":"d30d8b41b047815ab5770c730b7a6d09939f2347b4a4257b87bebec08a5794fe","src/helpers.rs":"5d6f164468234ca8806dc1cea117b42dbfae80cc4c9ae965cb0556efdb364682","src/lib.rs":"7dc9d6bbe0ca46082b5c7d049b230388ff2681831506b2798d7ab6e478e18693","src/rendering_params.rs":"be1d1c433f76926c285d8ecdb747c5d9cc6a6c10c1a1890c0760cd99755ed471","src/test.rs":"d77e45f8866abeea070cbbafd4cbde62d875292e8d191310a04c70091978547c","src/types.rs":"784235c15d61fb0d001373575169aa473c92af18dcbc1709a5b2bbaa3a7ceb22"},"package":"9f013da79c3fb2a9653534b064cd2ca62e10f8b6d19ed8fdc885cb2873412789"} \ No newline at end of file diff --git a/third_party/rust/app_units-0.3.0/.cargo-ok b/third_party/rust/servo-dwrote/.cargo-ok similarity index 100% rename from third_party/rust/app_units-0.3.0/.cargo-ok rename to third_party/rust/servo-dwrote/.cargo-ok diff --git a/third_party/rust/dwrote/.gitignore b/third_party/rust/servo-dwrote/.gitignore similarity index 100% rename from third_party/rust/dwrote/.gitignore rename to third_party/rust/servo-dwrote/.gitignore diff --git a/third_party/rust/dwrote/Cargo.toml b/third_party/rust/servo-dwrote/Cargo.toml similarity index 73% rename from third_party/rust/dwrote/Cargo.toml rename to third_party/rust/servo-dwrote/Cargo.toml index 9e97b687bf47..c7aec0c6db3a 100644 --- a/third_party/rust/dwrote/Cargo.toml +++ b/third_party/rust/servo-dwrote/Cargo.toml @@ -1,9 +1,9 @@ [package] -name = "dwrote" +name = "servo-dwrote" description = "Lightweight binding to DirectWrite." -repository = "https://github.com/vvuk/dwrote-rs" +repository = "https://github.com/servo/dwrote-rs" license = "MPL-2.0" -version = "0.1.7" +version = "0.2.0" authors = ["Vladimir Vukicevic "] build = "build.rs" @@ -21,10 +21,10 @@ lazy_static = "0.2" winapi = "0.2" kernel32-sys = "0.2" gdi32-sys = "0.2" -serde = "0.8" -serde_derive = {version = "0.8", optional = true} +serde = "0.9" +serde_derive = {version = "0.9", optional = true} [build-dependencies.serde_codegen] -version = "0.8" +version = "0.9" default_features = false optional = true diff --git a/third_party/rust/dwrote/README.md b/third_party/rust/servo-dwrote/README.md similarity index 100% rename from third_party/rust/dwrote/README.md rename to third_party/rust/servo-dwrote/README.md diff --git a/third_party/rust/dwrote/build.rs b/third_party/rust/servo-dwrote/build.rs similarity index 100% rename from third_party/rust/dwrote/build.rs rename to third_party/rust/servo-dwrote/build.rs diff --git a/third_party/rust/dwrote/src/bitmap_render_target.rs b/third_party/rust/servo-dwrote/src/bitmap_render_target.rs similarity index 100% rename from third_party/rust/dwrote/src/bitmap_render_target.rs rename to third_party/rust/servo-dwrote/src/bitmap_render_target.rs diff --git a/third_party/rust/dwrote/src/com_helpers.rs b/third_party/rust/servo-dwrote/src/com_helpers.rs similarity index 100% rename from third_party/rust/dwrote/src/com_helpers.rs rename to third_party/rust/servo-dwrote/src/com_helpers.rs diff --git a/third_party/rust/dwrote/src/comptr.rs b/third_party/rust/servo-dwrote/src/comptr.rs similarity index 100% rename from third_party/rust/dwrote/src/comptr.rs rename to third_party/rust/servo-dwrote/src/comptr.rs diff --git a/third_party/rust/dwrote/src/font.rs b/third_party/rust/servo-dwrote/src/font.rs similarity index 100% rename from third_party/rust/dwrote/src/font.rs rename to third_party/rust/servo-dwrote/src/font.rs diff --git a/third_party/rust/dwrote/src/font_collection.rs b/third_party/rust/servo-dwrote/src/font_collection.rs similarity index 100% rename from third_party/rust/dwrote/src/font_collection.rs rename to third_party/rust/servo-dwrote/src/font_collection.rs diff --git a/third_party/rust/dwrote/src/font_face.rs b/third_party/rust/servo-dwrote/src/font_face.rs similarity index 100% rename from third_party/rust/dwrote/src/font_face.rs rename to third_party/rust/servo-dwrote/src/font_face.rs diff --git a/third_party/rust/dwrote/src/font_family.rs b/third_party/rust/servo-dwrote/src/font_family.rs similarity index 100% rename from third_party/rust/dwrote/src/font_family.rs rename to third_party/rust/servo-dwrote/src/font_family.rs diff --git a/third_party/rust/dwrote/src/font_file.rs b/third_party/rust/servo-dwrote/src/font_file.rs similarity index 100% rename from third_party/rust/dwrote/src/font_file.rs rename to third_party/rust/servo-dwrote/src/font_file.rs diff --git a/third_party/rust/dwrote/src/font_file_loader_impl.rs b/third_party/rust/servo-dwrote/src/font_file_loader_impl.rs similarity index 100% rename from third_party/rust/dwrote/src/font_file_loader_impl.rs rename to third_party/rust/servo-dwrote/src/font_file_loader_impl.rs diff --git a/third_party/rust/dwrote/src/gdi_interop.rs b/third_party/rust/servo-dwrote/src/gdi_interop.rs similarity index 100% rename from third_party/rust/dwrote/src/gdi_interop.rs rename to third_party/rust/servo-dwrote/src/gdi_interop.rs diff --git a/third_party/rust/dwrote/src/glyph_run_analysis.rs b/third_party/rust/servo-dwrote/src/glyph_run_analysis.rs similarity index 100% rename from third_party/rust/dwrote/src/glyph_run_analysis.rs rename to third_party/rust/servo-dwrote/src/glyph_run_analysis.rs diff --git a/third_party/rust/dwrote/src/helpers.rs b/third_party/rust/servo-dwrote/src/helpers.rs similarity index 100% rename from third_party/rust/dwrote/src/helpers.rs rename to third_party/rust/servo-dwrote/src/helpers.rs diff --git a/third_party/rust/dwrote/src/lib.rs b/third_party/rust/servo-dwrote/src/lib.rs similarity index 98% rename from third_party/rust/dwrote/src/lib.rs rename to third_party/rust/servo-dwrote/src/lib.rs index 91ceee950900..73fce9eecd79 100644 --- a/third_party/rust/dwrote/src/lib.rs +++ b/third_party/rust/servo-dwrote/src/lib.rs @@ -2,7 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#![cfg_attr(feature = "serde_derive", feature(proc_macro, rustc_attrs, structural_match))] #![allow(non_upper_case_globals)] #[cfg(feature = "serde_derive")] diff --git a/third_party/rust/dwrote/src/rendering_params.rs b/third_party/rust/servo-dwrote/src/rendering_params.rs similarity index 100% rename from third_party/rust/dwrote/src/rendering_params.rs rename to third_party/rust/servo-dwrote/src/rendering_params.rs diff --git a/third_party/rust/dwrote/src/test.rs b/third_party/rust/servo-dwrote/src/test.rs similarity index 100% rename from third_party/rust/dwrote/src/test.rs rename to third_party/rust/servo-dwrote/src/test.rs diff --git a/third_party/rust/dwrote/src/types.rs b/third_party/rust/servo-dwrote/src/types.rs similarity index 100% rename from third_party/rust/dwrote/src/types.rs rename to third_party/rust/servo-dwrote/src/types.rs diff --git a/toolkit/library/gtest/rust/Cargo.lock b/toolkit/library/gtest/rust/Cargo.lock index d72940fd882d..a0d4b6d64e16 100644 --- a/toolkit/library/gtest/rust/Cargo.lock +++ b/toolkit/library/gtest/rust/Cargo.lock @@ -20,17 +20,6 @@ name = "ansi_term" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "app_units" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "app_units" version = "0.4.0" @@ -57,13 +46,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bincode" -version = "0.6.1" +version = "1.0.0-alpha2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -199,21 +187,21 @@ dependencies = [ [[package]] name = "core-graphics" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "core-text" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -240,20 +228,6 @@ name = "dtoa" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "dwrote" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "encoding" version = "0.2.33" @@ -325,18 +299,6 @@ name = "error-chain" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "euclid" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "euclid" version = "0.11.0" @@ -588,12 +550,12 @@ dependencies = [ [[package]] name = "offscreen_gl_context" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -601,7 +563,7 @@ dependencies = [ "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.12.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -794,11 +756,6 @@ dependencies = [ "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "serde" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "serde" version = "0.9.7" @@ -806,7 +763,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_codegen" -version = "0.8.23" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -835,6 +792,20 @@ dependencies = [ "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "servo-dwrote" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "servo_config" version = "0.0.1" @@ -1150,17 +1121,16 @@ dependencies = [ [[package]] name = "webrender" -version = "0.15.0" +version = "0.19.0" dependencies = [ - "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bincode 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)", "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-text 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "dwrote 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-text 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "gamma-lut 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1168,42 +1138,43 @@ dependencies = [ "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "offscreen_gl_context 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "offscreen_gl_context 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-dwrote 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "webrender_traits 0.14.0", + "webrender_traits 0.19.0", ] [[package]] name = "webrender_bindings" version = "0.1.0" dependencies = [ - "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "webrender 0.15.0", - "webrender_traits 0.14.0", + "webrender 0.19.0", + "webrender_traits 0.19.0", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "webrender_traits" -version = "0.14.0" +version = "0.19.0" dependencies = [ - "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "dwrote 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "offscreen_gl_context 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "offscreen_gl_context 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-dwrote 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1241,11 +1212,10 @@ dependencies = [ [metadata] "checksum aho-corasick 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0638fd549427caa90c499814196d1b9e3725eb4d15d7339d6de073a680ed0ca2" "checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" -"checksum app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "636ee56f12e31dbc11dc0a1ac6004f08b04e6e6595963716fc8130e90d4e04cf" "checksum app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a0c3b5be4ed53affe3e1a162b2e7ef9979bcaac80daa9026e9d7988c41e0e83" "checksum aster 0.38.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2c9b49e42a449c0b79d8acb91db37621de0978064dca7d3288ddcf030123e5b3" "checksum atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2dcb6e6d35f20276943cc04bb98e538b348d525a04ac79c10021561d202f21" -"checksum bincode 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "55eb0b7fd108527b0c77860f75eca70214e11a8b4c6ef05148c54c05a25d48ad" +"checksum bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)" = "62650bb5651ba8f0580cebf4ef255d791b8b0ef53800322661e1bb5791d42966" "checksum bindgen 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "facc480c409c373db3c870e377ce223e5e07d979efc2604691dc6f583e8ded0f" "checksum bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9bf6104718e80d7b26a68fdbacff3481cfc05df670821affc7e9cbc1884400c" "checksum bit-vec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5b97c2c8e8bbb4251754f559df8af22fb264853c7d009084a576cdf12565089d" @@ -1261,12 +1231,11 @@ dependencies = [ "checksum core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f51ce3b8ebe311c56de14231eb57572c15abebd2d32b3bcb99bcdb9c101f5ac3" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" "checksum core-foundation-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "41115a6aa5d3e1e5ef98148373f25971d1fad53818553f216495f9e67e90a624" -"checksum core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b205856aba54bfd36e69a1058f45fbe0d3c37be7375309dcff4a22a2a631fea" -"checksum core-text 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9703f459a41e622b15ca612dbc5fa4b30b6545a32864a83e0fdc538cfa08969c" +"checksum core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ead017dcf77f503dc991f6b52de6084eeea60a94b0a652baa9bf88654a28e83f" +"checksum core-text 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0e9719616a10f717628e074744f8c55df7b450f7a34d29c196d14f4498aad05d" "checksum cssparser 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "693cc9c8d3d0779ff60ff6b8b73497bda2c7151b6489c3a9c1f95f5d4f4497e5" "checksum deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1614659040e711785ed8ea24219140654da1729f3ec8a47a9719d041112fe7bf" "checksum dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80c8b71fd71146990a9742fc06dcbbde19161a267e0ad4e572c35162f4578c90" -"checksum dwrote 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "5998238340a4625b5e1cf52341bd330c5ad91a39a41527ed8af20f95a258a96c" "checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" "checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" "checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" @@ -1276,7 +1245,6 @@ dependencies = [ "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" "checksum env_logger 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "99971fb1b635fe7a0ee3c4d065845bb93cca80a23b5613b5613391ece5de4144" "checksum error-chain 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "318cb3c71ee4cdea69fdc9e15c173b245ed6063e1709029e8fd32525a881120f" -"checksum euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f93a556290e09f379cbfaa4f75ac52a72a3d2deb7d04076f312cdb2e6acba28e" "checksum euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34559b159306de36203986eff799f83ef2bfb301a29fad333883f1a74a4cc6b0" "checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344" "checksum freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fde23272c687e4570aefec06cb71174ec0f5284b725deac4e77ba2665d635faf" @@ -1302,7 +1270,7 @@ dependencies = [ "checksum num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "fb24d9bfb3f222010df27995441ded1e954f8f69cd35021f6bef02ca9552fb92" "checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c" "checksum num_cpus 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a225d1e2717567599c24f88e49f00856c6e825a12125181ee42c4257e3688d39" -"checksum offscreen_gl_context 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "171f74d51d4c94dae19d13c502dbf09afab328a5517f8bfeee2f2a33ced3bca9" +"checksum offscreen_gl_context 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac875ea951d7d695a1cc8c370777d6a0e2b7355ca49506034683df09b24b1bc" "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8" "checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" "checksum owning_ref 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9d52571ddcb42e9c900c901a18d8d67e393df723fcd51dd59c5b1a85d0acb6cc" @@ -1324,11 +1292,11 @@ dependencies = [ "checksum regex-syntax 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9191b1f57603095f105d317e375d19b1c9c5c3185ea9633a99a6dcbed04457" "checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b" "checksum same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7" -"checksum serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" "checksum serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1e0ed773960f90a78567fcfbe935284adf50c5d7cf119aa2cf43bb0b4afa69bb" -"checksum serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c5d8a33087d8984f9535daa62a6498a08f6476050b00ab9339dd847e4c25cc" +"checksum serde_codegen 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f94de585a73dfc312ca77194209278a587bf90d3edc6c2d0fc479b0ed71d1f0" "checksum serde_codegen_internals 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "afad7924a009f859f380e4a2e3a509a845c2ac66435fcead74a4d983b21ae806" "checksum serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "cf37ce931677e98b4fa5e6469aaa3ab4b6228309ea33b1b22d3ec055adfc4515" +"checksum servo-dwrote 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f013da79c3fb2a9653534b064cd2ca62e10f8b6d19ed8fdc885cb2873412789" "checksum shared_library 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04126b6fcfd2710fb5b6d18f4207b6c535f2850a7e1a43bcd526d44f30a79a" "checksum siphasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ffc669b726f2bc9a3bcff66e5e23b56ba6bf70e22a34c3d7b6d0b3450b65b84" "checksum smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc8d19212aacecf95e4a7a2179b26f7aeb9732a915cf01f05b0d3e044865410" diff --git a/toolkit/library/rust/Cargo.lock b/toolkit/library/rust/Cargo.lock index becef23dd957..3c1fae267b8f 100644 --- a/toolkit/library/rust/Cargo.lock +++ b/toolkit/library/rust/Cargo.lock @@ -18,17 +18,6 @@ name = "ansi_term" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "app_units" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "app_units" version = "0.4.0" @@ -55,13 +44,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bincode" -version = "0.6.1" +version = "1.0.0-alpha2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -197,21 +185,21 @@ dependencies = [ [[package]] name = "core-graphics" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "core-text" -version = "3.0.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -238,20 +226,6 @@ name = "dtoa" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "dwrote" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "encoding" version = "0.2.33" @@ -323,18 +297,6 @@ name = "error-chain" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "euclid" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "euclid" version = "0.11.0" @@ -575,12 +537,12 @@ dependencies = [ [[package]] name = "offscreen_gl_context" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cgl 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", @@ -588,7 +550,7 @@ dependencies = [ "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "x11 2.12.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -781,11 +743,6 @@ dependencies = [ "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "serde" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "serde" version = "0.9.7" @@ -793,7 +750,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_codegen" -version = "0.8.23" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -822,6 +779,20 @@ dependencies = [ "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "servo-dwrote" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "servo_config" version = "0.0.1" @@ -1137,17 +1108,16 @@ dependencies = [ [[package]] name = "webrender" -version = "0.15.0" +version = "0.19.0" dependencies = [ - "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bincode 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)", "bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-text 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "dwrote 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "core-text 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "gamma-lut 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1155,42 +1125,43 @@ dependencies = [ "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "offscreen_gl_context 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", + "offscreen_gl_context 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-dwrote 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)", - "webrender_traits 0.14.0", + "webrender_traits 0.19.0", ] [[package]] name = "webrender_bindings" version = "0.1.0" dependencies = [ - "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "webrender 0.15.0", - "webrender_traits 0.14.0", + "webrender 0.19.0", + "webrender_traits 0.19.0", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "webrender_traits" -version = "0.14.0" +version = "0.19.0" dependencies = [ - "app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "dwrote 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "offscreen_gl_context 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)", + "offscreen_gl_context 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_codegen 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "servo-dwrote 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1228,11 +1199,10 @@ dependencies = [ [metadata] "checksum aho-corasick 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0638fd549427caa90c499814196d1b9e3725eb4d15d7339d6de073a680ed0ca2" "checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" -"checksum app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "636ee56f12e31dbc11dc0a1ac6004f08b04e6e6595963716fc8130e90d4e04cf" "checksum app_units 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a0c3b5be4ed53affe3e1a162b2e7ef9979bcaac80daa9026e9d7988c41e0e83" "checksum aster 0.38.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2c9b49e42a449c0b79d8acb91db37621de0978064dca7d3288ddcf030123e5b3" "checksum atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2dcb6e6d35f20276943cc04bb98e538b348d525a04ac79c10021561d202f21" -"checksum bincode 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "55eb0b7fd108527b0c77860f75eca70214e11a8b4c6ef05148c54c05a25d48ad" +"checksum bincode 1.0.0-alpha2 (registry+https://github.com/rust-lang/crates.io-index)" = "62650bb5651ba8f0580cebf4ef255d791b8b0ef53800322661e1bb5791d42966" "checksum bindgen 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "facc480c409c373db3c870e377ce223e5e07d979efc2604691dc6f583e8ded0f" "checksum bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9bf6104718e80d7b26a68fdbacff3481cfc05df670821affc7e9cbc1884400c" "checksum bit-vec 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5b97c2c8e8bbb4251754f559df8af22fb264853c7d009084a576cdf12565089d" @@ -1248,12 +1218,11 @@ dependencies = [ "checksum core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f51ce3b8ebe311c56de14231eb57572c15abebd2d32b3bcb99bcdb9c101f5ac3" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" "checksum core-foundation-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "41115a6aa5d3e1e5ef98148373f25971d1fad53818553f216495f9e67e90a624" -"checksum core-graphics 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b205856aba54bfd36e69a1058f45fbe0d3c37be7375309dcff4a22a2a631fea" -"checksum core-text 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9703f459a41e622b15ca612dbc5fa4b30b6545a32864a83e0fdc538cfa08969c" +"checksum core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ead017dcf77f503dc991f6b52de6084eeea60a94b0a652baa9bf88654a28e83f" +"checksum core-text 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0e9719616a10f717628e074744f8c55df7b450f7a34d29c196d14f4498aad05d" "checksum cssparser 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "693cc9c8d3d0779ff60ff6b8b73497bda2c7151b6489c3a9c1f95f5d4f4497e5" "checksum deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1614659040e711785ed8ea24219140654da1729f3ec8a47a9719d041112fe7bf" "checksum dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80c8b71fd71146990a9742fc06dcbbde19161a267e0ad4e572c35162f4578c90" -"checksum dwrote 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "5998238340a4625b5e1cf52341bd330c5ad91a39a41527ed8af20f95a258a96c" "checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" "checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" "checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" @@ -1263,7 +1232,6 @@ dependencies = [ "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" "checksum env_logger 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "99971fb1b635fe7a0ee3c4d065845bb93cca80a23b5613b5613391ece5de4144" "checksum error-chain 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "318cb3c71ee4cdea69fdc9e15c173b245ed6063e1709029e8fd32525a881120f" -"checksum euclid 0.10.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f93a556290e09f379cbfaa4f75ac52a72a3d2deb7d04076f312cdb2e6acba28e" "checksum euclid 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34559b159306de36203986eff799f83ef2bfb301a29fad333883f1a74a4cc6b0" "checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344" "checksum freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fde23272c687e4570aefec06cb71174ec0f5284b725deac4e77ba2665d635faf" @@ -1289,7 +1257,7 @@ dependencies = [ "checksum num-integer 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "fb24d9bfb3f222010df27995441ded1e954f8f69cd35021f6bef02ca9552fb92" "checksum num-traits 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "a16a42856a256b39c6d3484f097f6713e14feacd9bfb02290917904fae46c81c" "checksum num_cpus 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a225d1e2717567599c24f88e49f00856c6e825a12125181ee42c4257e3688d39" -"checksum offscreen_gl_context 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "171f74d51d4c94dae19d13c502dbf09afab328a5517f8bfeee2f2a33ced3bca9" +"checksum offscreen_gl_context 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac875ea951d7d695a1cc8c370777d6a0e2b7355ca49506034683df09b24b1bc" "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8" "checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" "checksum owning_ref 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9d52571ddcb42e9c900c901a18d8d67e393df723fcd51dd59c5b1a85d0acb6cc" @@ -1311,11 +1279,11 @@ dependencies = [ "checksum regex-syntax 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9191b1f57603095f105d317e375d19b1c9c5c3185ea9633a99a6dcbed04457" "checksum rustc-serialize 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "237546c689f20bb44980270c73c3b9edd0891c1be49cc1274406134a66d3957b" "checksum same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7" -"checksum serde 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" "checksum serde 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1e0ed773960f90a78567fcfbe935284adf50c5d7cf119aa2cf43bb0b4afa69bb" -"checksum serde_codegen 0.8.23 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c5d8a33087d8984f9535daa62a6498a08f6476050b00ab9339dd847e4c25cc" +"checksum serde_codegen 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f94de585a73dfc312ca77194209278a587bf90d3edc6c2d0fc479b0ed71d1f0" "checksum serde_codegen_internals 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "afad7924a009f859f380e4a2e3a509a845c2ac66435fcead74a4d983b21ae806" "checksum serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "cf37ce931677e98b4fa5e6469aaa3ab4b6228309ea33b1b22d3ec055adfc4515" +"checksum servo-dwrote 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f013da79c3fb2a9653534b064cd2ca62e10f8b6d19ed8fdc885cb2873412789" "checksum shared_library 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04126b6fcfd2710fb5b6d18f4207b6c535f2850a7e1a43bcd526d44f30a79a" "checksum siphasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ffc669b726f2bc9a3bcff66e5e23b56ba6bf70e22a34c3d7b6d0b3450b65b84" "checksum smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "fcc8d19212aacecf95e4a7a2179b26f7aeb9732a915cf01f05b0d3e044865410" From 33d74b040e4b0aaa2c688d121032855dacf6b7db Mon Sep 17 00:00:00 2001 From: Morris Tseng Date: Thu, 23 Feb 2017 16:46:56 +0800 Subject: [PATCH 6/9] Bug 1340871 - Add CompositorUseANGLE info to TextureFactoryIdentifier. r=nical MozReview-Commit-ID: GjlZS6T2i0p --- gfx/ipc/GfxMessageUtils.h | 2 ++ gfx/layers/CompositorTypes.h | 3 +++ gfx/layers/ipc/KnowsCompositor.h | 5 +++++ gfx/layers/opengl/CompositorOGL.h | 1 + gfx/layers/wr/WebRenderBridgeParent.cpp | 3 ++- gfx/webrender_bindings/WebRenderAPI.cpp | 9 +++++++-- gfx/webrender_bindings/WebRenderAPI.h | 5 ++++- 7 files changed, 24 insertions(+), 4 deletions(-) diff --git a/gfx/ipc/GfxMessageUtils.h b/gfx/ipc/GfxMessageUtils.h index 6ccb5442f2c7..77bec6a3cbcc 100644 --- a/gfx/ipc/GfxMessageUtils.h +++ b/gfx/ipc/GfxMessageUtils.h @@ -922,6 +922,7 @@ struct ParamTraits WriteParam(aMsg, aParam.mParentBackend); WriteParam(aMsg, aParam.mParentProcessType); WriteParam(aMsg, aParam.mMaxTextureSize); + WriteParam(aMsg, aParam.mCompositorUseANGLE); WriteParam(aMsg, aParam.mSupportsTextureBlitting); WriteParam(aMsg, aParam.mSupportsPartialUploads); WriteParam(aMsg, aParam.mSupportsComponentAlpha); @@ -933,6 +934,7 @@ struct ParamTraits bool result = ReadParam(aMsg, aIter, &aResult->mParentBackend) && ReadParam(aMsg, aIter, &aResult->mParentProcessType) && ReadParam(aMsg, aIter, &aResult->mMaxTextureSize) && + ReadParam(aMsg, aIter, &aResult->mCompositorUseANGLE) && ReadParam(aMsg, aIter, &aResult->mSupportsTextureBlitting) && ReadParam(aMsg, aIter, &aResult->mSupportsPartialUploads) && ReadParam(aMsg, aIter, &aResult->mSupportsComponentAlpha) && diff --git a/gfx/layers/CompositorTypes.h b/gfx/layers/CompositorTypes.h index c6ce4c2cbe75..c166ac9470dc 100644 --- a/gfx/layers/CompositorTypes.h +++ b/gfx/layers/CompositorTypes.h @@ -168,6 +168,7 @@ struct TextureFactoryIdentifier LayersBackend mParentBackend; GeckoProcessType mParentProcessType; int32_t mMaxTextureSize; + bool mCompositorUseANGLE; bool mSupportsTextureBlitting; bool mSupportsPartialUploads; bool mSupportsComponentAlpha; @@ -176,6 +177,7 @@ struct TextureFactoryIdentifier explicit TextureFactoryIdentifier(LayersBackend aLayersBackend = LayersBackend::LAYERS_NONE, GeckoProcessType aParentProcessType = GeckoProcessType_Default, int32_t aMaxTextureSize = 4096, + bool aCompositorUseANGLE = false, bool aSupportsTextureBlitting = false, bool aSupportsPartialUploads = false, bool aSupportsComponentAlpha = true, @@ -183,6 +185,7 @@ struct TextureFactoryIdentifier : mParentBackend(aLayersBackend) , mParentProcessType(aParentProcessType) , mMaxTextureSize(aMaxTextureSize) + , mCompositorUseANGLE(aCompositorUseANGLE) , mSupportsTextureBlitting(aSupportsTextureBlitting) , mSupportsPartialUploads(aSupportsPartialUploads) , mSupportsComponentAlpha(aSupportsComponentAlpha) diff --git a/gfx/layers/ipc/KnowsCompositor.h b/gfx/layers/ipc/KnowsCompositor.h index 92985e105851..0c2672cf9212 100755 --- a/gfx/layers/ipc/KnowsCompositor.h +++ b/gfx/layers/ipc/KnowsCompositor.h @@ -62,6 +62,11 @@ public: return mTextureFactoryIdentifier.mSupportsComponentAlpha; } + bool GetCompositorUseANGLE() const + { + return mTextureFactoryIdentifier.mCompositorUseANGLE; + } + const TextureFactoryIdentifier& GetTextureFactoryIdentifier() const { return mTextureFactoryIdentifier; diff --git a/gfx/layers/opengl/CompositorOGL.h b/gfx/layers/opengl/CompositorOGL.h index 9b8ad4e0d6fe..574c95b119db 100644 --- a/gfx/layers/opengl/CompositorOGL.h +++ b/gfx/layers/opengl/CompositorOGL.h @@ -141,6 +141,7 @@ public: TextureFactoryIdentifier(LayersBackend::LAYERS_OPENGL, XRE_GetProcessType(), GetMaxTextureSize(), + false, mFBOTextureTarget == LOCAL_GL_TEXTURE_2D, SupportsPartialTextureUpdate()); return result; diff --git a/gfx/layers/wr/WebRenderBridgeParent.cpp b/gfx/layers/wr/WebRenderBridgeParent.cpp index 98c452fefb62..838406788c6e 100644 --- a/gfx/layers/wr/WebRenderBridgeParent.cpp +++ b/gfx/layers/wr/WebRenderBridgeParent.cpp @@ -696,7 +696,8 @@ WebRenderBridgeParent::GetTextureFactoryIdentifier() return TextureFactoryIdentifier(LayersBackend::LAYERS_WR, XRE_GetProcessType(), - mApi->GetMaxTextureSize()); + mApi->GetMaxTextureSize(), + mApi->GetUseANGLE()); } } // namespace layers diff --git a/gfx/webrender_bindings/WebRenderAPI.cpp b/gfx/webrender_bindings/WebRenderAPI.cpp index f51a12bc91aa..af43a7a1faf1 100644 --- a/gfx/webrender_bindings/WebRenderAPI.cpp +++ b/gfx/webrender_bindings/WebRenderAPI.cpp @@ -18,11 +18,13 @@ class NewRenderer : public RendererEvent public: NewRenderer(WrAPI** aApi, layers::CompositorBridgeParentBase* aBridge, GLint* aMaxTextureSize, + bool* aUseANGLE, RefPtr&& aWidget, layers::SynchronousTask* aTask, bool aEnableProfiler) : mWrApi(aApi) , mMaxTextureSize(aMaxTextureSize) + , mUseANGLE(aUseANGLE) , mBridge(aBridge) , mCompositorWidget(Move(aWidget)) , mTask(aTask) @@ -46,6 +48,7 @@ public: } gl->fGetIntegerv(LOCAL_GL_MAX_TEXTURE_SIZE, mMaxTextureSize); + *mUseANGLE = gl->IsANGLE(); WrRenderer* wrRenderer = nullptr; if (!wr_window_new(aWindowId, gl.get(), this->mEnableProfiler, nullptr, mWrApi, &wrRenderer)) { @@ -67,6 +70,7 @@ public: private: WrAPI** mWrApi; GLint* mMaxTextureSize; + bool* mUseANGLE; layers::CompositorBridgeParentBase* mBridge; RefPtr mCompositorWidget; layers::SynchronousTask* mTask; @@ -112,12 +116,13 @@ WebRenderAPI::Create(bool aEnableProfiler, WrAPI* wrApi = nullptr; GLint maxTextureSize = 0; + bool useANGLE = false; // Dispatch a synchronous task because the WrApi object needs to be created // on the render thread. If need be we could delay waiting on this task until // the next time we need to access the WrApi object. layers::SynchronousTask task("Create Renderer"); - auto event = MakeUnique(&wrApi, aBridge, &maxTextureSize, + auto event = MakeUnique(&wrApi, aBridge, &maxTextureSize, &useANGLE, Move(aWidget), &task, aEnableProfiler); RenderThread::Get()->RunEvent(id, Move(event)); @@ -127,7 +132,7 @@ WebRenderAPI::Create(bool aEnableProfiler, return nullptr; } - return RefPtr(new WebRenderAPI(wrApi, id, maxTextureSize)).forget(); + return RefPtr(new WebRenderAPI(wrApi, id, maxTextureSize, useANGLE)).forget(); } WebRenderAPI::~WebRenderAPI() diff --git a/gfx/webrender_bindings/WebRenderAPI.h b/gfx/webrender_bindings/WebRenderAPI.h index d60fd4e6318e..13f7a059be2c 100644 --- a/gfx/webrender_bindings/WebRenderAPI.h +++ b/gfx/webrender_bindings/WebRenderAPI.h @@ -71,12 +71,14 @@ public: void Readback(gfx::IntSize aSize, uint8_t *aBuffer, uint32_t aBufferSize); GLint GetMaxTextureSize() const { return mMaxTextureSize; } + bool GetUseANGLE() const { return mUseANGLE; } protected: - WebRenderAPI(WrAPI* aRawApi, wr::WindowId aId, GLint aMaxTextureSize) + WebRenderAPI(WrAPI* aRawApi, wr::WindowId aId, GLint aMaxTextureSize, bool aUseANGLE) : mWrApi(aRawApi) , mId(aId) , mMaxTextureSize(aMaxTextureSize) + , mUseANGLE(aUseANGLE) {} ~WebRenderAPI(); @@ -84,6 +86,7 @@ protected: WrAPI* mWrApi; wr::WindowId mId; GLint mMaxTextureSize; + bool mUseANGLE; friend class DisplayListBuilder; }; From ad3be07b9114945980cea63d7f103adac8d35401 Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 23 Feb 2017 07:36:24 -0800 Subject: [PATCH 7/9] No bug, Automated HSTS preload list update from host bld-linux64-spot-036 - a=hsts-update --- security/manager/ssl/nsSTSPreloadList.errors | 141 +- security/manager/ssl/nsSTSPreloadList.inc | 29992 +++++++++-------- 2 files changed, 15071 insertions(+), 15062 deletions(-) diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors index 12ba46b0adb6..a90334fba16a 100644 --- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -6,6 +6,7 @@ 0x1337.eu: could not connect to host 0x44.net: did not receive HSTS header 0xa.in: could not connect to host +0xacab.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] 0xb612.org: could not connect to host 0xf00.ch: did not receive HSTS header 100dayloans.com: max-age too low: 0 @@ -44,7 +45,6 @@ 3sreporting.com: did not receive HSTS header 3yearloans.com: max-age too low: 0 404.sh: max-age too low: 0 -404404.info: could not connect to host 41844.de: could not connect to host 420dongstorm.com: could not connect to host 42ms.org: could not connect to host @@ -53,6 +53,7 @@ 47ronin.com: did not receive HSTS header 4cclothing.com: could not connect to host 4elements.com: did not receive HSTS header +4eyes.ch: did not receive HSTS header 4mm.org: did not receive HSTS header 4sqsu.eu: could not connect to host 50millionablaze.org: did not receive HSTS header @@ -151,6 +152,7 @@ airbnb.com: did not receive HSTS header aircomms.com: did not receive HSTS header airproto.com: did not receive HSTS header aishnair.com: could not connect to host +aisle3.space: could not connect to host aiticon.de: did not receive HSTS header aiw-thkoeln.online: could not connect to host ajmahal.com: could not connect to host @@ -309,6 +311,9 @@ askfit.cz: did not receive HSTS header asm-x.com: could not connect to host asmui.ga: could not connect to host asmui.ml: could not connect to host +asr.li: could not connect to host +asr.rocks: could not connect to host +asr.solar: could not connect to host asrob.eu: did not receive HSTS header ass.org.au: did not receive HSTS header assdecoeur.org: could not connect to host @@ -327,7 +332,6 @@ athaliasoft.com: did not receive HSTS header athenelive.com: could not connect to host athul.xyz: did not receive HSTS header atlex.nl: did not receive HSTS header -atlseccon.com: did not receive HSTS header atomik.pro: could not connect to host atop.io: could not connect to host attimidesigns.com: did not receive HSTS header @@ -448,12 +452,11 @@ besixdouze.world: could not connect to host bestbeards.ca: could not connect to host bestcellular.com: did not receive HSTS header betafive.net: could not connect to host -betaworx.de: did not receive HSTS header -betaworx.eu: did not receive HSTS header betcafearena.ro: did not receive HSTS header betnet.fr: could not connect to host betplanning.it: did not receive HSTS header bets.de: did not receive HSTS header +bettercrypto.org: could not connect to host bettween.com: could not connect to host betz.ro: did not receive HSTS header bevapehappy.com: did not receive HSTS header @@ -541,14 +544,13 @@ bodyweightsolution.com: could not connect to host boensou.com: did not receive HSTS header bogosity.se: could not connect to host bohan.life: could not connect to host -bombsquad.studio: could not connect to host bonapp.restaurant: could not connect to host bonfi.net: did not receive HSTS header bonigo.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] bonitabrazilian.co.nz: did not receive HSTS header bookcelerator.com: did not receive HSTS header booked.holiday: could not connect to host -bookourdjs.com: could not connect to host +bookourdjs.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] boomerang.com: could not connect to host boosterlearnpro.com: did not receive HSTS header bootjp.me: did not receive HSTS header @@ -597,11 +599,12 @@ buhler.pro: did not receive HSTS header buildci.asia: could not connect to host buildsaver.co.za: did not receive HSTS header built.by: did not receive HSTS header -builtritetrailerplans.com: could not connect to host +builtritetrailerplans.com: did not receive HSTS header bulletpoint.cz: did not receive HSTS header bulmafox.com: could not connect to host bumarkamoda.com: could not connect to host bunaken.asia: could not connect to host +bunbomenu.de: could not connect to host burian-server.cz: could not connect to host burrow.ovh: could not connect to host burtrum.me: could not connect to host @@ -628,6 +631,7 @@ bysymphony.com: max-age too low: 0 byte.wtf: did not receive HSTS header bytepark.de: did not receive HSTS header bytesund.biz: could not connect to host +c0rn3j.com: could not connect to host c1yd3i.me: could not connect to host c3b.info: could not connect to host cabarave.com: could not connect to host @@ -662,6 +666,7 @@ capturethepen.co.uk: could not connect to host car-navi.ph: did not receive HSTS header carano-service.de: did not receive HSTS header caraudio69.cz: could not connect to host +carck.co.uk: did not receive HSTS header cardloan-manual.net: could not connect to host cardoni.net: did not receive HSTS header cardstream.com: did not receive HSTS header @@ -734,7 +739,6 @@ cheesetart.my: could not connect to host cheetah85.de: could not connect to host chejianer.cn: did not receive HSTS header chensir.net: could not connect to host -chepaofen.com: could not connect to host cherysunzhang.com: max-age too low: 7776000 chihiro.xyz: could not connect to host chijiokeindustries.co.uk: could not connect to host @@ -778,7 +782,6 @@ clara-baumert.de: could not connect to host classicsandexotics.com: did not receive HSTS header classicspublishing.com: could not connect to host clcleaningco.com: could not connect to host -cldly.com: could not connect to host cleanexperts.co.uk: could not connect to host cleaningsquad.ca: could not connect to host cleanmta.com: could not connect to host @@ -789,7 +792,7 @@ clickandgo.com: did not receive HSTS header clickandshoot.nl: did not receive HSTS header clickgram.biz: could not connect to host clientsecure.me: could not connect to host -clint.id.au: max-age too low: 0 +clint.id.au: could not connect to host clintonbloodworth.com: could not connect to host clintonbloodworth.io: could not connect to host clintwilson.technology: max-age too low: 2592000 @@ -801,7 +804,6 @@ cloudcy.net: could not connect to host clouddesktop.co.nz: could not connect to host cloudey.net: did not receive HSTS header cloudflare.com: did not receive HSTS header -cloudily.com: could not connect to host cloudimag.es: could not connect to host cloudlink.club: could not connect to host cloudns.com.au: could not connect to host @@ -824,6 +826,7 @@ cmsbattle.com: could not connect to host cmscafe.ru: did not receive HSTS header cn.search.yahoo.com: did not receive HSTS header cni-certing.it: max-age too low: 0 +cnwage.com: could not connect to host co50.com: did not receive HSTS header cocaine-import.agency: could not connect to host cocktailfuture.fr: could not connect to host @@ -837,7 +840,6 @@ codeforce.io: could not connect to host codelayer.ca: could not connect to host codemonkeyrawks.net: did not receive HSTS header codepoet.de: could not connect to host -codepult.com: could not connect to host codepx.com: did not receive HSTS header codewiththepros.org: could not connect to host codiva.io: max-age too low: 2592000 @@ -889,7 +891,6 @@ cordial-restaurant.com: did not receive HSTS header core.mx: could not connect to host core4system.de: could not connect to host corenetworking.de: could not connect to host -corgicloud.com: did not receive HSTS header cormactagging.ie: could not connect to host cormilu.com.br: did not receive HSTS header correctpaardbatterijnietje.nl: did not receive HSTS header @@ -931,14 +932,13 @@ cruzr.xyz: could not connect to host crypt.guru: could not connect to host crypticshell.co.uk: could not connect to host cryptify.eu: could not connect to host -cryptobin.co: could not connect to host cryptobin.org: could not connect to host cryptojar.io: did not receive HSTS header cryptoki.fr: max-age too low: 7776000 cryptolab.pro: could not connect to host cryptolab.tk: could not connect to host cryptopartyatx.org: could not connect to host -cryptopush.com: did not receive HSTS header +cryptopush.com: could not connect to host crysadm.com: max-age too low: 1 crystalclassics.co.uk: did not receive HSTS header csapak.com: max-age too low: 0 @@ -1048,6 +1048,7 @@ deco.me: could not connect to host dedicatutiempo.es: could not connect to host deepcovelabs.net: could not connect to host deepearth.uk: did not receive HSTS header +deetz.nl: could not connect to host deetzen.de: did not receive HSTS header defiler.tk: could not connect to host degroetenvanrosaline.nl: did not receive HSTS header @@ -1090,7 +1091,6 @@ dewin.io: could not connect to host dhpcs.com: did not receive HSTS header dhpiggott.net: did not receive HSTS header diablotine.rocks: could not connect to host -diamante.ro: could not connect to host diarbag.us: did not receive HSTS header diasp.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] dick.red: could not connect to host @@ -1115,6 +1115,7 @@ diva-ey.com: could not connect to host dizihocasi.com: could not connect to host dizorg.net: could not connect to host dj4et.de: could not connect to host +djlnetworks.co.uk: did not receive HSTS header djz4music.com: did not receive HSTS header dl.google.com: did not receive HSTS header (error ignored - included regardless) dlc.viasinc.com: could not connect to host @@ -1157,9 +1158,12 @@ download.jitsi.org: did not receive HSTS header downsouthweddings.com.au: did not receive HSTS header doyoucheck.com: did not receive HSTS header dpratt.de: did not receive HSTS header +dpsg-roden.de: could not connect to host dragonisles.net: could not connect to host dragons-of-highlands.cz: could not connect to host -dragontrainingmobilezoo.com.au: max-age too low: 0 +dragontrainingmobilezoo.com.au: could not connect to host +drakeanddragon.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] +drakefortreasurer.sexy: could not connect to host draw.uy: could not connect to host drdevil.ru: could not connect to host drdim.ru: could not connect to host @@ -1181,16 +1185,15 @@ duesee.org: could not connect to host dullsir.com: did not receive HSTS header duria.de: max-age too low: 3600 dustri.org: did not receive HSTS header -dutchessuganda.com: did not receive HSTS header dutchrank.com: could not connect to host dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] dworzak.ch: could not connect to host dycontrol.de: could not connect to host dylanscott.com.au: did not receive HSTS header +dymersion.com: did not receive HSTS header dynamic-innovations.net: could not connect to host dzimejl.sk: did not receive HSTS header dzlibs.io: could not connect to host -dzndk.net: could not connect to host dzndk.org: could not connect to host e-aut.net: did not receive HSTS header e-deca2.org: did not receive HSTS header @@ -1198,7 +1201,7 @@ e-sa.com: did not receive HSTS header e3amn2l.com: could not connect to host earlybirdsnacks.com: could not connect to host earthrise16.com: could not connect to host -easez.net: did not receive HSTS header +easez.net: could not connect to host easychiller.org: could not connect to host easyhaul.com: did not receive HSTS header eatlowcarb.de: did not receive HSTS header @@ -1246,6 +1249,7 @@ elanguest.ru: did not receive HSTS header elbetech.net: could not connect to host electricianforum.co.uk: did not receive HSTS header electromc.com: could not connect to host +elektronring.com: could not connect to host elemenx.com: did not receive HSTS header elemprendedor.com.ve: could not connect to host elenag.ga: could not connect to host @@ -1278,7 +1282,6 @@ encode.space: did not receive HSTS header encoder.pw: could not connect to host encontrebarato.com.br: did not receive HSTS header encrypted.google.com: did not receive HSTS header (error ignored - included regardless) -encryptedaudience.com: could not connect to host end.pp.ua: could not connect to host endlessdark.net: max-age too low: 600 endlessdiy.ca: could not connect to host @@ -1312,7 +1315,6 @@ equilibre-yoga-jennifer-will.com: could not connect to host erawanarifnugroho.com: did not receive HSTS header eressea.xyz: could not connect to host eridanus.uk: could not connect to host -erikhubers.nl: could not connect to host ernaehrungsberatung-rapperswil.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] ernaehrungsberatung-zurich.ch: could not connect to host ernesto.at: could not connect to host @@ -1361,7 +1363,6 @@ exfiles.cz: did not receive HSTS header exgravitus.com: could not connect to host exitus.jp: max-age too low: 0 exno.co: could not connect to host -expatads.com: could not connect to host expertmile.com: did not receive HSTS header expoundite.net: did not receive HSTS header expressfinance.co.za: did not receive HSTS header @@ -1395,10 +1396,12 @@ fallenangelspirits.uk: could not connect to host familie-sprink.de: could not connect to host familie-zimmermann.at: could not connect to host familjenm.se: could not connect to host +fantopia.club: could not connect to host fanyl.cn: could not connect to host farhadexchange.com: did not receive HSTS header fashioncare.cz: did not receive HSTS header fasset.jp: could not connect to host +fastconfirm.com: could not connect to host fastograph.com: could not connect to host fastopen.ml: could not connect to host fatgeekflix.net: could not connect to host @@ -1425,7 +1428,6 @@ fexmen.com: could not connect to host ffmradio.de: did not receive HSTS header fhdhelp.de: could not connect to host fhdhilft.de: could not connect to host -fierman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] fifieldtech.com: could not connect to host fiftyshadesofluca.ml: could not connect to host fig.co: did not receive HSTS header @@ -1509,6 +1511,7 @@ foxtrot.pw: could not connect to host fr33d0m.link: could not connect to host francevpn.xyz: could not connect to host frangor.info: did not receive HSTS header +frankwei.xyz: could not connect to host franta.biz: did not receive HSTS header franta.email: did not receive HSTS header franzt.de: could not connect to host @@ -1544,7 +1547,6 @@ fuckgfw233.org: could not connect to host fukushima-web.com: did not receive HSTS header fundacionhijosdelsol.org: could not connect to host funkyweddingideas.com.au: could not connect to host -funnyang.com: could not connect to host funrun.com: did not receive HSTS header furiffic.com: did not receive HSTS header furnation.com: could not connect to host @@ -1692,7 +1694,7 @@ gogold-g.com: could not connect to host gold24.in: did not receive HSTS header goldendata.io: could not connect to host golocal-media.de: did not receive HSTS header -gonzalosanchez.mx: could not connect to host +gonzalosanchez.mx: did not receive HSTS header goodenough.nz: did not receive HSTS header goodwin43.ru: could not connect to host google: could not connect to host (error ignored - included regardless) @@ -1708,7 +1710,6 @@ gov.ax: could not connect to host govillemo.ca: did not receive HSTS header gozel.com.tr: did not receive HSTS header gparent.org: did not receive HSTS header -gpfclan.de: could not connect to host gpsfix.cz: could not connect to host gpstuner.com: did not receive HSTS header gracesofgrief.com: max-age too low: 86400 @@ -1749,13 +1750,11 @@ gtraxapp.com: could not connect to host gts-schulsoftware.de: did not receive HSTS header guava.studio: did not receive HSTS header guilde-vindicta.fr: did not receive HSTS header -guildgearscore.cf: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] gulenet.com: could not connect to host gunnarhafdal.com: did not receive HSTS header gurom.lv: could not connect to host gurusupe.com: could not connect to host guso.gq: could not connect to host -guso.ml: could not connect to host guso.site: could not connect to host guso.tech: could not connect to host gussi.is: did not receive HSTS header @@ -1770,7 +1769,6 @@ gyboche.science: could not connect to host gycis.me: could not connect to host gypthecat.com: max-age too low: 604800 gyz.io: could not connect to host -gzitech.com: could not connect to host h2check.org: could not connect to host haarkliniek.com: did not receive HSTS header habanaavenue.com: did not receive HSTS header @@ -1779,6 +1777,7 @@ hablemosdetecnologia.com.ve: could not connect to host hack.cz: could not connect to host hack.li: did not receive HSTS header hacker.one: could not connect to host +hackerchai.com: could not connect to host hackerforever.com: did not receive HSTS header hackerone-ext-adroll.com: could not connect to host hackest.org: did not receive HSTS header @@ -1806,11 +1805,9 @@ happyfabric.me: did not receive HSTS header happygastro.com: could not connect to host harabuhouse.com: did not receive HSTS header harbor-light.net: could not connect to host -hardfalcon.net: could not connect to host hardline.xyz: could not connect to host haribosupermix.com: could not connect to host harmonycosmetic.com: max-age too low: 300 -harrisonsand.com: could not connect to host harristony.com: could not connect to host hartmancpa.com: did not receive HSTS header harvestrenewal.org: did not receive HSTS header @@ -1896,6 +1893,7 @@ hosted-service.com: did not receive HSTS header hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless) hostgarou.com: did not receive HSTS header hostinaus.com.au: could not connect to host +hostinghelp.guru: could not connect to host hostisan.com: did not receive HSTS header hotchillibox.com: max-age too low: 0 hotchoc.io: did not receive HSTS header @@ -1920,7 +1918,6 @@ humblefinances.com: could not connect to host humeurs.net: could not connect to host humpteedumptee.in: did not receive HSTS header huntshomeinspections.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] -hupp.se: could not connect to host hurricanelabs.com: did not receive HSTS header huskybutt.dog: could not connect to host hydra.ws: could not connect to host @@ -1970,7 +1967,6 @@ ihrnationalrat.ch: could not connect to host ihsbsd.me: could not connect to host ihsbsd.tk: could not connect to host ihuanmeng.com: did not receive HSTS header -ikkatsu-satei.jp: did not receive HSTS header ikujii.com: max-age too low: 0 ikwilguidobellen.nl: did not receive HSTS header ilbuongiorno.it: did not receive HSTS header @@ -2025,14 +2021,12 @@ inleaked.com: could not connect to host inmyarea.com: max-age too low: 0 innophate-security.nl: could not connect to host ins1gn1a.com: did not receive HSTS header -insane-bullets.com: could not connect to host insane.zone: could not connect to host insite-feedback.com: did not receive HSTS header inspire-av.com: did not receive HSTS header inspiroinc.com: could not connect to host instacart.com: did not receive HSTS header instantdev.io: could not connect to host -instela.com: did not receive HSTS header institutoflordelavida.com: could not connect to host intel.li: could not connect to host intelldynamics.com: could not connect to host @@ -2051,7 +2045,7 @@ invite24.pro: could not connect to host inwesttitle.com: max-age too low: 0 ionx.co.uk: did not receive HSTS header iop.intuit.com: max-age too low: 86400 -iosmods.com: could not connect to host +iosmods.com: did not receive HSTS header iostips.ru: could not connect to host iotsms.io: could not connect to host ip6.im: did not receive HSTS header @@ -2133,7 +2127,7 @@ jartza.org: could not connect to host jasmineconseil.com: could not connect to host jasonrobinson.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] jasonroe.me: did not receive HSTS header -jasonsansone.com: could not connect to host +jasonsansone.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] jastoria.pl: could not connect to host jayblock.com: did not receive HSTS header jayschulman.com: did not receive HSTS header @@ -2191,7 +2185,6 @@ jonn.me: could not connect to host joostbovee.nl: did not receive HSTS header jordanhamilton.me: could not connect to host joretapo.fr: did not receive HSTS header -jornadasciberdefensa2016.es: did not receive HSTS header josahrens.me: could not connect to host joshi.su: could not connect to host joshstroup.me: could not connect to host @@ -2213,7 +2206,6 @@ junaos.xyz: did not receive HSTS header junge-selbsthilfe.info: could not connect to host junqtion.com: could not connect to host jupp0r.de: did not receive HSTS header -justanothercompany.name: could not connect to host justlikethat.hosting: did not receive HSTS header justnaw.co.uk: could not connect to host justudin.com: did not receive HSTS header @@ -2230,6 +2222,7 @@ kaela.design: could not connect to host kahopoon.net: could not connect to host kaisers.de: did not receive HSTS header kalami.nl: did not receive HSTS header +kaleidomarketing.com: could not connect to host kamikano.com: could not connect to host kaneo-gmbh.de: did not receive HSTS header kaplatz.is: could not connect to host @@ -2332,14 +2325,12 @@ krayx.com: could not connect to host kreavis.com: did not receive HSTS header kredite.sale: could not connect to host kriegt.es: could not connect to host -krmela.com: could not connect to host kroetenfuchs.de: could not connect to host kropkait.pl: could not connect to host krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] krunut.com: did not receive HSTS header krypteia.org: could not connect to host kryptomech.com: could not connect to host -kschv-rdeck.de: did not receive HSTS header ksfh-mail.de: could not connect to host kstan.me: could not connect to host kswriter.com: could not connect to host @@ -2451,7 +2442,6 @@ liaoshuma.com: could not connect to host libertyrp.org: could not connect to host library.linode.com: did not receive HSTS header librechan.net: could not connect to host -libscode.com: could not connect to host lidl-selection.at: could not connect to host lidow.eu: could not connect to host lifeguard.aecom.com: did not receive HSTS header @@ -2567,10 +2557,10 @@ maarten.nyc: did not receive HSTS header maartenvandekamp.nl: did not receive HSTS header mac-torrents.me: did not receive HSTS header macchaberrycream.com: could not connect to host -macchedil.com: did not receive HSTS header macdj.tk: could not connect to host macgeneral.de: did not receive HSTS header machon.biz: could not connect to host +macosxfilerecovery.com: did not receive HSTS header madars.org: did not receive HSTS header maddin.ga: could not connect to host madebymagnitude.com: did not receive HSTS header @@ -2615,9 +2605,9 @@ mario.party: did not receive HSTS header markaconnor.com: could not connect to host markayapilandirma.com: could not connect to host market.android.com: did not receive HSTS header (error ignored - included regardless) -markprof.ru: could not connect to host markrego.com: could not connect to host marktboten.de: did not receive HSTS header +marktissink.nl: did not receive HSTS header markus-dev.com: did not receive HSTS header markusweimar.de: did not receive HSTS header marleyresort.com: did not receive HSTS header @@ -2658,7 +2648,6 @@ mccarty.io: could not connect to host mccrackon.com: could not connect to host mcdonalds.ru: did not receive HSTS header mcga.media: did not receive HSTS header -mcjackk77.com: could not connect to host mclab.su: could not connect to host mdewendt.de: could not connect to host mdfnet.se: did not receive HSTS header @@ -2786,7 +2775,6 @@ moebel-nagel.de: did not receive HSTS header moelord.org: could not connect to host moen.io: did not receive HSTS header mogry.net: did not receive HSTS header -moho.kr: did not receive HSTS header monarca.systems: could not connect to host monasterialis.eu: could not connect to host mondar.io: did not receive HSTS header @@ -2819,7 +2807,6 @@ moviesabout.net: could not connect to host moy-gorod.od.ua: did not receive HSTS header moy.cat: did not receive HSTS header mp3juices.is: could not connect to host -mpintaamalabanna.it: could not connect to host mqas.net: could not connect to host mrdani.net: could not connect to host mrettich.org: did not receive HSTS header @@ -2864,7 +2851,6 @@ mycollab.net: could not connect to host mycoted.com: did not receive HSTS header mydeos.com: could not connect to host mydigipass.com: did not receive HSTS header -myg21.com: max-age too low: 0 mygate.at: could not connect to host mygdut.com: did not receive HSTS header mygov.scot: did not receive HSTS header @@ -2880,9 +2866,9 @@ myphonebox.de: could not connect to host myraytech.net: did not receive HSTS header mysecretrewards.com: did not receive HSTS header mystery-science-theater-3000.de: did not receive HSTS header -mythslegendscollection.com: did not receive HSTS header myvirtualserver.com: max-age too low: 2592000 myzone.com: did not receive HSTS header +mziulu.me: could not connect to host n0psled.nl: could not connect to host n2x.in: could not connect to host n4l.pw: could not connect to host @@ -2893,7 +2879,7 @@ naiharngym.com: did not receive HSTS header najedlo.sk: did not receive HSTS header nakliyatsirketi.biz: did not receive HSTS header nakuro.de: could not connect to host -nalifornia.com: did not receive HSTS header +nalifornia.com: could not connect to host nallon.com.br: could not connect to host namacindia.com: did not receive HSTS header namaho.com: could not connect to host @@ -2903,7 +2889,6 @@ nan.zone: could not connect to host nanogeneinc.com: could not connect to host nanto.eu: could not connect to host narada.com.ua: could not connect to host -nargileh.nl: could not connect to host narindal.ch: did not receive HSTS header natalia-fadeeva.ru: could not connect to host natalia.io: could not connect to host @@ -2924,7 +2909,6 @@ ncpc.gov: could not connect to host nct.org.uk: max-age too low: 1 nctx.co.uk: did not receive HSTS header near.st: did not receive HSTS header -neel.ch: could not connect to host neels.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] neftaly.com: did not receive HSTS header neilgreen.net: did not receive HSTS header @@ -2978,10 +2962,9 @@ nien.chat: could not connect to host nightwinds.tk: could not connect to host nightx.uk: could not connect to host niho.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] -niklas.pw: could not connect to host nikomo.fi: could not connect to host ninchisho-online.com: did not receive HSTS header -ninhs.org: did not receive HSTS header +ninhs.org: could not connect to host nippler.org: did not receive HSTS header nippombashi.net: did not receive HSTS header nipponcareers.com: did not receive HSTS header @@ -3022,6 +3005,7 @@ nozoe.jp: did not receive HSTS header np.search.yahoo.com: did not receive HSTS header npol.de: could not connect to host nqesh.com: could not connect to host +nrizzio.me: could not connect to host ntbs.pro: could not connect to host ntse.xyz: could not connect to host nu3.at: did not receive HSTS header @@ -3034,6 +3018,7 @@ nu3.fi: did not receive HSTS header nu3.fr: did not receive HSTS header nu3.no: did not receive HSTS header nu3.se: did not receive HSTS header +nubella.com.au: did not receive HSTS header nufla.de: could not connect to host null-sec.ru: could not connect to host null.cat: could not connect to host @@ -3343,7 +3328,7 @@ poleartschool.com: could not connect to host policeiwitness.sg: could not connect to host polimat.org: could not connect to host politically-incorrect.xyz: could not connect to host -politologos.org: could not connect to host +politologos.org: did not receive HSTS header polycoise.com: could not connect to host polypho.nyc: could not connect to host pompompoes.com: could not connect to host @@ -3353,6 +3338,7 @@ poon.tech: could not connect to host portalplatform.net: did not receive HSTS header poshpak.com: max-age too low: 86400 postcodewise.co.uk: did not receive HSTS header +posterspy.com: did not receive HSTS header postscheduler.org: could not connect to host posylka.de: did not receive HSTS header poussinooz.fr: could not connect to host @@ -3461,6 +3447,7 @@ raajheshkannaa.com: could not connect to host radicaleducation.net: could not connect to host rafaelcz.de: could not connect to host railgun.com.cn: could not connect to host +railjob.cn: could not connect to host rainbowbarracuda.com: could not connect to host ramonj.nl: could not connect to host randomcage.com: did not receive HSTS header @@ -3472,7 +3459,6 @@ rapido.nu: did not receive HSTS header rapidresearch.me: could not connect to host rapidthunder.io: could not connect to host rasing.me: did not receive HSTS header -raspass.me: could not connect to host rastreador.com.es: did not receive HSTS header ratajczak.fr: could not connect to host rate-esport.de: could not connect to host @@ -3539,7 +3525,6 @@ respostas.com.br: did not receive HSTS header restchart.com: did not receive HSTS header retcor.net: could not connect to host retrotracks.net: max-age too low: 0 -reulitz.de: could not connect to host revealdata.com: did not receive HSTS header revello.org: did not receive HSTS header reverie.pw: could not connect to host @@ -3581,7 +3566,6 @@ robteix.com: did not receive HSTS header robtex.net: did not receive HSTS header robtex.org: did not receive HSTS header rochman.id: could not connect to host -rocketr.net: did not receive HSTS header rocksberg.net: could not connect to host rockstarloan.com: max-age too low: 0 roddis.net: did not receive HSTS header @@ -3610,6 +3594,7 @@ rouvray.org: could not connect to host royalpub.net: did not receive HSTS header rr.in.th: could not connect to host rrke.cc: did not receive HSTS header +rrom.me: could not connect to host rsajeey.info: could not connect to host rsauget.fr: could not connect to host rsf.io: could not connect to host @@ -3639,7 +3624,6 @@ rxv.cc: could not connect to host ryansmithphotography.com: did not receive HSTS header ryanteck.uk: did not receive HSTS header s.how: did not receive HSTS header -s007.co: could not connect to host safematix.com: could not connect to host safewings-nh.nl: did not receive HSTS header safic.net: could not connect to host @@ -3662,7 +3646,7 @@ sandrolittke.de: did not receive HSTS header sandviks.com: did not receive HSTS header sangwon.org: could not connect to host sansemea.com: did not receive HSTS header -sansonehowell.com: could not connect to host +sansonehowell.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] sarah-beckett-harpist.com: did not receive HSTS header sarahsweetlife.com: could not connect to host sarakas.com: could not connect to host @@ -3689,6 +3673,7 @@ sazima.ru: did not receive HSTS header sbox-archives.com: could not connect to host sby.de: did not receive HSTS header sc4le.com: could not connect to host +scannabi.com: could not connect to host scepticism.com: could not connect to host schadegarant.net: could not connect to host schnell-gold.com: could not connect to host @@ -3765,6 +3750,7 @@ seomobo.com: could not connect to host seowarp.net: did not receive HSTS header sep23.ru: did not receive HSTS header seq.tf: did not receive HSTS header +serathius.ovh: could not connect to host serenitycreams.com: did not receive HSTS header serfdom.io: did not receive HSTS header serized.pw: could not connect to host @@ -3783,12 +3769,12 @@ setuid0.kr: could not connect to host sexpay.net: could not connect to host seyahatsagliksigortalari.com: could not connect to host sfsltd.com: did not receive HSTS header +sh-network.de: could not connect to host shadoom.com: did not receive HSTS header shadowmorph.info: did not receive HSTS header shadowsocks.net: could not connect to host shakepeers.org: did not receive HSTS header shanesage.com: could not connect to host -shanewadleigh.com: could not connect to host shareimg.xyz: could not connect to host sharepass.pw: could not connect to host shauncrowley.co.uk: could not connect to host @@ -3802,7 +3788,7 @@ shiinko.com: could not connect to host shinebijoux.com.br: could not connect to host shinju.moe: could not connect to host shinonome-lab.eu.org: could not connect to host -shiona.xyz: could not connect to host +shiona.xyz: did not receive HSTS header shocksrv.com: did not receive HSTS header shooshosha.com: did not receive HSTS header shopontarget.com: did not receive HSTS header @@ -3850,7 +3836,6 @@ sitennisclub.com: did not receive HSTS header siterip.org: could not connect to host sites.google.com: did not receive HSTS header (error ignored - included regardless) sitesten.com: did not receive HSTS header -sitsy.ru: did not receive HSTS header sixtwentyten.com: did not receive HSTS header skhosting.eu: did not receive HSTS header skile.ru: could not connect to host @@ -3871,6 +3856,7 @@ slightfuture.click: could not connect to host slix.io: could not connect to host slope.haus: could not connect to host slovakiana.sk: did not receive HSTS header +slowfood.es: could not connect to host sluitkampzeist.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] slycurity.de: could not connect to host smart-mirror.de: did not receive HSTS header @@ -3893,7 +3879,6 @@ snakehosting.dk: did not receive HSTS header snapappointments.com: did not receive HSTS header snapappts.com: could not connect to host snapworks.net: did not receive HSTS header -sneberger.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] snel4u.nl: could not connect to host snelwerk.be: could not connect to host sng.my: could not connect to host @@ -3926,7 +3911,7 @@ somethingnew.xyz: could not connect to host sonicrainboom.rocks: could not connect to host soobi.org: did not receive HSTS header soondy.com: did not receive HSTS header -sotiran.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] +sotiran.com: did not receive HSTS header sotor.de: did not receive HSTS header soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] soulfulglamour.uk: could not connect to host @@ -3938,6 +3923,7 @@ souyar.net: could not connect to host souyar.us: could not connect to host sovereignshare.com: could not connect to host sown.dyndns.org: could not connect to host +sowncloud.de: did not receive HSTS header spacehq.org: max-age too low: 0 spaggel.nl: could not connect to host sparelib.com: max-age too low: 3650 @@ -3986,7 +3972,6 @@ ssl.rip: could not connect to host ssmato.me: could not connect to host ssnc.org: max-age too low: 300 sss3s.com: did not receive HSTS header -st-news.de: could not connect to host stabletoken.com: could not connect to host stadjerspasonline.nl: could not connect to host stahl.xyz: could not connect to host @@ -4033,6 +4018,8 @@ storecove.com: did not receive HSTS header storefrontify.com: did not receive HSTS header stormhub.org: could not connect to host stpatricksguild.com: did not receive HSTS header +stpip.com: could not connect to host +stpip.net: could not connect to host stqry.com: did not receive HSTS header str0.at: did not receive HSTS header strasweb.fr: did not receive HSTS header @@ -4157,7 +4144,7 @@ team-teasers.com: could not connect to host teamsocial.co: did not receive HSTS header teamzeus.cz: could not connect to host tech55i.com: did not receive HSTS header -techassist.io: could not connect to host +techassist.io: did not receive HSTS header techelements.co: could not connect to host techhipster.net: could not connect to host techhub.ml: could not connect to host @@ -4173,7 +4160,6 @@ tegelsensanitaironline.nl: did not receive HSTS header tekshrek.com: did not receive HSTS header telefonnummer.online: could not connect to host telefoonnummerinfo.nl: could not connect to host -telling.xyz: could not connect to host temehu.com: did not receive HSTS header tempcraft.net: could not connect to host tendertool.nl: could not connect to host @@ -4243,10 +4229,12 @@ therewill.be: could not connect to host theseed.io: could not connect to host thestack.xyz: could not connect to host thestagchorleywood.co.uk: did not receive HSTS header +thetechnical.me: could not connect to host thetomharling.com: max-age too low: 86400 theurbanyoga.com: did not receive HSTS header thevintagenews.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] thewebfellas.com: did not receive HSTS header +theyosh.nl: could not connect to host thezonders.com: did not receive HSTS header thierfreund.de: could not connect to host thingies.site: could not connect to host @@ -4278,7 +4266,6 @@ tikutiku.pl: max-age too low: 0 tildebot.com: could not connect to host tilkah.com.au: could not connect to host tillcraft.com: could not connect to host -tillseasyscore.com: could not connect to host timbeilby.com: could not connect to host timbuktutimber.com: did not receive HSTS header timcamara.com: did not receive HSTS header @@ -4326,12 +4313,14 @@ tomharling.co.uk: max-age too low: 86400 tomharling.uk: max-age too low: 86400 tomharris.tech: did not receive HSTS header tomlankhorst.nl: did not receive HSTS header +tomli.blog: could not connect to host tommsy.com: did not receive HSTS header tommyads.com: could not connect to host tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] tonyfantjr.com: could not connect to host tonyw.xyz: could not connect to host toomanypillows.com: could not connect to host +toool.org: did not receive HSTS header top-stage.net: could not connect to host topbargains.com.au: did not receive HSTS header topdeskdev.net: could not connect to host @@ -4362,6 +4351,7 @@ trinityaffirmations.com: max-age too low: 0 trinitycore.org: max-age too low: 2592000 tripdelta.com: did not receive HSTS header trixies-wish.nz: could not connect to host +trkpuls.tk: could not connect to host trollme.me: could not connect to host trunkjunk.co: did not receive HSTS header trusitio.com: did not receive HSTS header @@ -4440,7 +4430,7 @@ unblocked.works: did not receive HSTS header unblocked.world: did not receive HSTS header unccdesign.club: could not connect to host unclegen.xyz: could not connect to host -undernet.uy: did not receive HSTS header +undernet.uy: could not connect to host unfiltered.nyc: did not receive HSTS header unfuddle.cn: could not connect to host uni-games.com: could not connect to host @@ -4477,7 +4467,7 @@ used-in.jp: did not receive HSTS header usercare.com: did not receive HSTS header userify.com: did not receive HSTS header ustr.gov: max-age too low: 86400 -utilitarianism.net: could not connect to host +utilitarianism.net: did not receive HSTS header utleieplassen.no: could not connect to host utopiagalaxy.space: could not connect to host utopianhomespa.com: did not receive HSTS header @@ -4508,7 +4498,6 @@ vanitynailworkz.com: could not connect to host vanlaanen.com: did not receive HSTS header vansieleghem.com: could not connect to host vasanth.org: did not receive HSTS header -vbazile.com: could not connect to host vbulletin-russia.com: could not connect to host vbulletinrussia.com: could not connect to host vcdove.com: did not receive HSTS header @@ -4555,7 +4544,6 @@ viva-french.com: did not receive HSTS header vlastimilburian.cz: did not receive HSTS header vlora.city: could not connect to host vm0.eu: did not receive HSTS header -vmc.co.id: could not connect to host vmrdev.com: could not connect to host voceinveste.com: did not receive HSTS header vodpay.com: could not connect to host @@ -4728,7 +4716,7 @@ wufu.org: did not receive HSTS header wuhengmin.com: did not receive HSTS header wurzelzwerg.net: could not connect to host wusx.club: could not connect to host -www.apollo-auto.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] +www.apollo-auto.com: could not connect to host www.braintreepayments.com: did not receive HSTS header www.calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] www.cueup.com: could not connect to host @@ -4753,7 +4741,9 @@ www.zenpayroll.com: did not receive HSTS header www3.info: could not connect to host wxukang.cn: could not connect to host wyzphoto.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] +x-case.de: max-age too low: 0 x2w.io: could not connect to host +x3led.com: could not connect to host xa.search.yahoo.com: did not receive HSTS header xandocs.com: could not connect to host xatr0z.org: could not connect to host @@ -4883,6 +4873,7 @@ zentraler-kreditausschuss.de: did not receive HSTS header zentralwolke.de: did not receive HSTS header zera.com.au: could not connect to host zerolab.org: could not connect to host +zertif.info: could not connect to host zerudi.com: did not receive HSTS header zett4.me: could not connect to host zeytin.pro: could not connect to host diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index 52f789644444..3ba26ebd21c4 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1498665744919000); +const PRTime gPreloadListExpirationTime = INT64_C(1498750404667000); static const char kSTSHostTable[] = { /* "0.me.uk", true */ '0', '.', 'm', 'e', '.', 'u', 'k', '\0', @@ -38,7 +38,6 @@ static const char kSTSHostTable[] = { /* "0x90.io", true */ '0', 'x', '9', '0', '.', 'i', 'o', '\0', /* "0xAA55.me", true */ '0', 'x', 'A', 'A', '5', '5', '.', 'm', 'e', '\0', /* "0xaa55.me", true */ '0', 'x', 'a', 'a', '5', '5', '.', 'm', 'e', '\0', - /* "0xacab.org", true */ '0', 'x', 'a', 'c', 'a', 'b', '.', 'o', 'r', 'g', '\0', /* "0xda.de", true */ '0', 'x', 'd', 'a', '.', 'd', 'e', '\0', /* "0xdefaced.de", true */ '0', 'x', 'd', 'e', 'f', 'a', 'c', 'e', 'd', '.', 'd', 'e', '\0', /* "0xee.eu", true */ '0', 'x', 'e', 'e', '.', 'e', 'u', '\0', @@ -164,6 +163,7 @@ static const char kSTSHostTable[] = { /* "4-1-where.com", true */ '4', '-', '1', '-', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "4-it.de", true */ '4', '-', 'i', 't', '.', 'd', 'e', '\0', /* "403.ch", true */ '4', '0', '3', '.', 'c', 'h', '\0', + /* "404404.info", true */ '4', '0', '4', '4', '0', '4', '.', 'i', 'n', 'f', 'o', '\0', /* "4096bit.de", true */ '4', '0', '9', '6', 'b', 'i', 't', '.', 'd', 'e', '\0', /* "41-where.com", true */ '4', '1', '-', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "41where.com", true */ '4', '1', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0', @@ -173,7 +173,6 @@ static const char kSTSHostTable[] = { /* "491mhz.net", true */ '4', '9', '1', 'm', 'h', 'z', '.', 'n', 'e', 't', '\0', /* "4azino777.ru", true */ '4', 'a', 'z', 'i', 'n', 'o', '7', '7', '7', '.', 'r', 'u', '\0', /* "4d2.xyz", true */ '4', 'd', '2', '.', 'x', 'y', 'z', '\0', - /* "4eyes.ch", false */ '4', 'e', 'y', 'e', 's', '.', 'c', 'h', '\0', /* "4g-server.eu", false */ '4', 'g', '-', 's', 'e', 'r', 'v', 'e', 'r', '.', 'e', 'u', '\0', /* "4loc.us", true */ '4', 'l', 'o', 'c', '.', 'u', 's', '\0', /* "4miners.net", true */ '4', 'm', 'i', 'n', 'e', 'r', 's', '.', 'n', 'e', 't', '\0', @@ -494,7 +493,6 @@ static const char kSTSHostTable[] = { /* "airpbx.com", true */ 'a', 'i', 'r', 'p', 'b', 'x', '.', 'c', 'o', 'm', '\0', /* "airsoft.ch", true */ 'a', 'i', 'r', 's', 'o', 'f', 't', '.', 'c', 'h', '\0', /* "airvuz.com", true */ 'a', 'i', 'r', 'v', 'u', 'z', '.', 'c', 'o', 'm', '\0', - /* "aisle3.space", true */ 'a', 'i', 's', 'l', 'e', '3', '.', 's', 'p', 'a', 'c', 'e', '\0', /* "aistockcharts.com", true */ 'a', 'i', 's', 't', 'o', 'c', 'k', 'c', 'h', 'a', 'r', 't', 's', '.', 'c', 'o', 'm', '\0', /* "aiticon.com", true */ 'a', 'i', 't', 'i', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "aitosoftware.com", true */ 'a', 'i', 't', 'o', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0', @@ -1022,9 +1020,6 @@ static const char kSTSHostTable[] = { /* "asphaltfruehling.de", true */ 'a', 's', 'p', 'h', 'a', 'l', 't', 'f', 'r', 'u', 'e', 'h', 'l', 'i', 'n', 'g', '.', 'd', 'e', '\0', /* "asphyxia.su", true */ 'a', 's', 'p', 'h', 'y', 'x', 'i', 'a', '.', 's', 'u', '\0', /* "aspires.co.jp", true */ 'a', 's', 'p', 'i', 'r', 'e', 's', '.', 'c', 'o', '.', 'j', 'p', '\0', - /* "asr.li", true */ 'a', 's', 'r', '.', 'l', 'i', '\0', - /* "asr.rocks", true */ 'a', 's', 'r', '.', 'r', 'o', 'c', 'k', 's', '\0', - /* "asr.solar", true */ 'a', 's', 'r', '.', 's', 'o', 'l', 'a', 'r', '\0', /* "assemble-together.org", true */ 'a', 's', 's', 'e', 'm', 'b', 'l', 'e', '-', 't', 'o', 'g', 'e', 't', 'h', 'e', 'r', '.', 'o', 'r', 'g', '\0', /* "assindia.nl", true */ 'a', 's', 's', 'i', 'n', 'd', 'i', 'a', '.', 'n', 'l', '\0', /* "assurancesmons.be", true */ 'a', 's', 's', 'u', 'r', 'a', 'n', 'c', 'e', 's', 'm', 'o', 'n', 's', '.', 'b', 'e', '\0', @@ -1064,6 +1059,7 @@ static const char kSTSHostTable[] = { /* "atlantischild.hu", true */ 'a', 't', 'l', 'a', 'n', 't', 'i', 's', 'c', 'h', 'i', 'l', 'd', '.', 'h', 'u', '\0', /* "atlassian.net", true */ 'a', 't', 'l', 'a', 's', 's', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0', /* "atletika.hu", true */ 'a', 't', 'l', 'e', 't', 'i', 'k', 'a', '.', 'h', 'u', '\0', + /* "atlseccon.com", true */ 'a', 't', 'l', 's', 'e', 'c', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "atnis.com", true */ 'a', 't', 'n', 'i', 's', '.', 'c', 'o', 'm', '\0', /* "atolm.net", true */ 'a', 't', 'o', 'l', 'm', '.', 'n', 'e', 't', '\0', /* "atom-china.org", true */ 'a', 't', 'o', 'm', '-', 'c', 'h', 'i', 'n', 'a', '.', 'o', 'r', 'g', '\0', @@ -1463,12 +1459,13 @@ static const char kSTSHostTable[] = { /* "bestperfumebrands.com", true */ 'b', 'e', 's', 't', 'p', 'e', 'r', 'f', 'u', 'm', 'e', 'b', 'r', 'a', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0', /* "bestseries.tv", true */ 'b', 'e', 's', 't', 's', 'e', 'r', 'i', 'e', 's', '.', 't', 'v', '\0', /* "betaclean.fr", true */ 'b', 'e', 't', 'a', 'c', 'l', 'e', 'a', 'n', '.', 'f', 'r', '\0', + /* "betaworx.de", true */ 'b', 'e', 't', 'a', 'w', 'o', 'r', 'x', '.', 'd', 'e', '\0', + /* "betaworx.eu", true */ 'b', 'e', 't', 'a', 'w', 'o', 'r', 'x', '.', 'e', 'u', '\0', /* "betlander.com", true */ 'b', 'e', 't', 'l', 'a', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "betobaccofree.gov", true */ 'b', 'e', 't', 'o', 'b', 'a', 'c', 'c', 'o', 'f', 'r', 'e', 'e', '.', 'g', 'o', 'v', '\0', /* "betonmoney.com", true */ 'b', 'e', 't', 'o', 'n', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "betpamm.com", true */ 'b', 'e', 't', 'p', 'a', 'm', 'm', '.', 'c', 'o', 'm', '\0', /* "betterbabyshop.com.au", true */ 'b', 'e', 't', 't', 'e', 'r', 'b', 'a', 'b', 'y', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', - /* "bettercrypto.org", true */ 'b', 'e', 't', 't', 'e', 'r', 'c', 'r', 'y', 'p', 't', 'o', '.', 'o', 'r', 'g', '\0', /* "betterhelp.com", true */ 'b', 'e', 't', 't', 'e', 'r', 'h', 'e', 'l', 'p', '.', 'c', 'o', 'm', '\0', /* "betterlifemakers.com", true */ 'b', 'e', 't', 't', 'e', 'r', 'l', 'i', 'f', 'e', 'm', 'a', 'k', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "bettertest.it", true */ 'b', 'e', 't', 't', 'e', 'r', 't', 'e', 's', 't', '.', 'i', 't', '\0', @@ -1786,6 +1783,7 @@ static const char kSTSHostTable[] = { /* "bokeyy.com", true */ 'b', 'o', 'k', 'e', 'y', 'y', '.', 'c', 'o', 'm', '\0', /* "bolt.cm", true */ 'b', 'o', 'l', 't', '.', 'c', 'm', '\0', /* "boltdata.io", false */ 'b', 'o', 'l', 't', 'd', 'a', 't', 'a', '.', 'i', 'o', '\0', + /* "bombsquad.studio", true */ 'b', 'o', 'm', 'b', 's', 'q', 'u', 'a', 'd', '.', 's', 't', 'u', 'd', 'i', 'o', '\0', /* "bondpro.gov", true */ 'b', 'o', 'n', 'd', 'p', 'r', 'o', '.', 'g', 'o', 'v', '\0', /* "bondskampeerder.nl", true */ 'b', 'o', 'n', 'd', 's', 'k', 'a', 'm', 'p', 'e', 'e', 'r', 'd', 'e', 'r', '.', 'n', 'l', '\0', /* "bonifacius.be", true */ 'b', 'o', 'n', 'i', 'f', 'a', 'c', 'i', 'u', 's', '.', 'b', 'e', '\0', @@ -2018,7 +2016,6 @@ static const char kSTSHostTable[] = { /* "bulldog-hosting.de", true */ 'b', 'u', 'l', 'l', 'd', 'o', 'g', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0', /* "bullterrier.me", true */ 'b', 'u', 'l', 'l', 't', 'e', 'r', 'r', 'i', 'e', 'r', '.', 'm', 'e', '\0', /* "bulmastife.com.br", true */ 'b', 'u', 'l', 'm', 'a', 's', 't', 'i', 'f', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', - /* "bunbomenu.de", true */ 'b', 'u', 'n', 'b', 'o', 'm', 'e', 'n', 'u', '.', 'd', 'e', '\0', /* "bunbun.be", false */ 'b', 'u', 'n', 'b', 'u', 'n', '.', 'b', 'e', '\0', /* "bund-von-theramore.de", true */ 'b', 'u', 'n', 'd', '-', 'v', 'o', 'n', '-', 't', 'h', 'e', 'r', 'a', 'm', 'o', 'r', 'e', '.', 'd', 'e', '\0', /* "bundaberg.com", true */ 'b', 'u', 'n', 'd', 'a', 'b', 'e', 'r', 'g', '.', 'c', 'o', 'm', '\0', @@ -2111,7 +2108,6 @@ static const char kSTSHostTable[] = { /* "c-webdesign.net", true */ 'c', '-', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'n', 'e', 't', '\0', /* "c-world.co.uk", true */ 'c', '-', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "c.cc", true */ 'c', '.', 'c', 'c', '\0', - /* "c0rn3j.com", true */ 'c', '0', 'r', 'n', '3', 'j', '.', 'c', 'o', 'm', '\0', /* "c16t.uk", true */ 'c', '1', '6', 't', '.', 'u', 'k', '\0', /* "c3vo.de", true */ 'c', '3', 'v', 'o', '.', 'd', 'e', '\0', /* "c3w.at", true */ 'c', '3', 'w', '.', 'a', 't', '\0', @@ -2241,7 +2237,6 @@ static const char kSTSHostTable[] = { /* "carbon12.software", true */ 'c', 'a', 'r', 'b', 'o', 'n', '1', '2', '.', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '\0', /* "carboneselectricosnettosl.info", false */ 'c', 'a', 'r', 'b', 'o', 'n', 'e', 's', 'e', 'l', 'e', 'c', 't', 'r', 'i', 'c', 'o', 's', 'n', 'e', 't', 't', 'o', 's', 'l', '.', 'i', 'n', 'f', 'o', '\0', /* "carbonmade.com", false */ 'c', 'a', 'r', 'b', 'o', 'n', 'm', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0', - /* "carck.co.uk", true */ 'c', 'a', 'r', 'c', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "card-toka.jp", true */ 'c', 'a', 'r', 'd', '-', 't', 'o', 'k', 'a', '.', 'j', 'p', '\0', /* "cardranking.jp", true */ 'c', 'a', 'r', 'd', 'r', 'a', 'n', 'k', 'i', 'n', 'g', '.', 'j', 'p', '\0', /* "cardrecovery.fr", true */ 'c', 'a', 'r', 'd', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'y', '.', 'f', 'r', '\0', @@ -2454,6 +2449,7 @@ static const char kSTSHostTable[] = { /* "chenky.com", true */ 'c', 'h', 'e', 'n', 'k', 'y', '.', 'c', 'o', 'm', '\0', /* "chennien.com", true */ 'c', 'h', 'e', 'n', 'n', 'i', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "chenzhekl.me", true */ 'c', 'h', 'e', 'n', 'z', 'h', 'e', 'k', 'l', '.', 'm', 'e', '\0', + /* "chepaofen.com", true */ 'c', 'h', 'e', 'p', 'a', 'o', 'f', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "cherryonit.com", true */ 'c', 'h', 'e', 'r', 'r', 'y', 'o', 'n', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "cherrywoodtech.com", true */ 'c', 'h', 'e', 'r', 'r', 'y', 'w', 'o', 'o', 'd', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0', /* "chesterbrass.uk", true */ 'c', 'h', 'e', 's', 't', 'e', 'r', 'b', 'r', 'a', 's', 's', '.', 'u', 'k', '\0', @@ -2607,6 +2603,7 @@ static const char kSTSHostTable[] = { /* "classpoint.cz", true */ 'c', 'l', 'a', 's', 's', 'p', 'o', 'i', 'n', 't', '.', 'c', 'z', '\0', /* "claudio4.com", true */ 'c', 'l', 'a', 'u', 'd', 'i', 'o', '4', '.', 'c', 'o', 'm', '\0', /* "clawe.de", true */ 'c', 'l', 'a', 'w', 'e', '.', 'd', 'e', '\0', + /* "cldly.com", true */ 'c', 'l', 'd', 'l', 'y', '.', 'c', 'o', 'm', '\0', /* "clearkonjac.com", true */ 'c', 'l', 'e', 'a', 'r', 'k', 'o', 'n', 'j', 'a', 'c', '.', 'c', 'o', 'm', '\0', /* "clearsettle-admin.com", true */ 'c', 'l', 'e', 'a', 'r', 's', 'e', 't', 't', 'l', 'e', '-', 'a', 'd', 'm', 'i', 'n', '.', 'c', 'o', 'm', '\0', /* "clearviewwealthprojector.com.au", true */ 'c', 'l', 'e', 'a', 'r', 'v', 'i', 'e', 'w', 'w', 'e', 'a', 'l', 't', 'h', 'p', 'r', 'o', 'j', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', @@ -2652,6 +2649,7 @@ static const char kSTSHostTable[] = { /* "cloudcaprice.net", true */ 'c', 'l', 'o', 'u', 'd', 'c', 'a', 'p', 'r', 'i', 'c', 'e', '.', 'n', 'e', 't', '\0', /* "cloudflareonazure.com", true */ 'c', 'l', 'o', 'u', 'd', 'f', 'l', 'a', 'r', 'e', 'o', 'n', 'a', 'z', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "cloudia.org", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'a', '.', 'o', 'r', 'g', '\0', + /* "cloudily.com", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'l', 'y', '.', 'c', 'o', 'm', '\0', /* "cloudmigrator365.com", true */ 'c', 'l', 'o', 'u', 'd', 'm', 'i', 'g', 'r', 'a', 't', 'o', 'r', '3', '6', '5', '.', 'c', 'o', 'm', '\0', /* "cloudoptimus.com", true */ 'c', 'l', 'o', 'u', 'd', 'o', 'p', 't', 'i', 'm', 'u', 's', '.', 'c', 'o', 'm', '\0', /* "cloudpagesforwork.com", true */ 'c', 'l', 'o', 'u', 'd', 'p', 'a', 'g', 'e', 's', 'f', 'o', 'r', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0', @@ -2685,7 +2683,6 @@ static const char kSTSHostTable[] = { /* "cnc-lehrgang.de", true */ 'c', 'n', 'c', '-', 'l', 'e', 'h', 'r', 'g', 'a', 'n', 'g', '.', 'd', 'e', '\0', /* "cncn.us", true */ 'c', 'n', 'c', 'n', '.', 'u', 's', '\0', /* "cnlic.com", true */ 'c', 'n', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0', - /* "cnwage.com", true */ 'c', 'n', 'w', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0', /* "cnwarn.com", true */ 'c', 'n', 'w', 'a', 'r', 'n', '.', 'c', 'o', 'm', '\0', /* "co.search.yahoo.com", false */ 'c', 'o', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0', /* "coachingconsultancy.com", true */ 'c', 'o', 'a', 'c', 'h', 'i', 'n', 'g', 'c', 'o', 'n', 's', 'u', 'l', 't', 'a', 'n', 'c', 'y', '.', 'c', 'o', 'm', '\0', @@ -2721,6 +2718,7 @@ static const char kSTSHostTable[] = { /* "codeplay.org", true */ 'c', 'o', 'd', 'e', 'p', 'l', 'a', 'y', '.', 'o', 'r', 'g', '\0', /* "codepoints.net", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'i', 'n', 't', 's', '.', 'n', 'e', 't', '\0', /* "codepref.com", true */ 'c', 'o', 'd', 'e', 'p', 'r', 'e', 'f', '.', 'c', 'o', 'm', '\0', + /* "codepult.com", true */ 'c', 'o', 'd', 'e', 'p', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0', /* "codera.co.uk", true */ 'c', 'o', 'd', 'e', 'r', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "codereview.appspot.com", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0', /* "codereview.chromium.org", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0', @@ -2906,6 +2904,7 @@ static const char kSTSHostTable[] = { /* "corex.io", true */ 'c', 'o', 'r', 'e', 'x', '.', 'i', 'o', '\0', /* "coreyjmahler.com", true */ 'c', 'o', 'r', 'e', 'y', 'j', 'm', 'a', 'h', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "corgi.party", true */ 'c', 'o', 'r', 'g', 'i', '.', 'p', 'a', 'r', 't', 'y', '\0', + /* "corgicloud.com", true */ 'c', 'o', 'r', 'g', 'i', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0', /* "cornercircle.co.uk", true */ 'c', 'o', 'r', 'n', 'e', 'r', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "corniche.com", true */ 'c', 'o', 'r', 'n', 'i', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0', /* "cornishcamels.com", true */ 'c', 'o', 'r', 'n', 'i', 's', 'h', 'c', 'a', 'm', 'e', 'l', 's', '.', 'c', 'o', 'm', '\0', @@ -3030,6 +3029,7 @@ static const char kSTSHostTable[] = { /* "crypto.graphics", true */ 'c', 'r', 'y', 'p', 't', 'o', '.', 'g', 'r', 'a', 'p', 'h', 'i', 'c', 's', '\0', /* "crypto.is", false */ 'c', 'r', 'y', 'p', 't', 'o', '.', 'i', 's', '\0', /* "cryptobells.com", false */ 'c', 'r', 'y', 'p', 't', 'o', 'b', 'e', 'l', 'l', 's', '.', 'c', 'o', 'm', '\0', + /* "cryptobin.co", true */ 'c', 'r', 'y', 'p', 't', 'o', 'b', 'i', 'n', '.', 'c', 'o', '\0', /* "cryptocon.org", true */ 'c', 'r', 'y', 'p', 't', 'o', 'c', 'o', 'n', '.', 'o', 'r', 'g', '\0', /* "cryptodash.net", true */ 'c', 'r', 'y', 'p', 't', 'o', 'd', 'a', 's', 'h', '.', 'n', 'e', 't', '\0', /* "cryptography.io", true */ 'c', 'r', 'y', 'p', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'i', 'o', '\0', @@ -3425,7 +3425,6 @@ static const char kSTSHostTable[] = { /* "deepserve.info", true */ 'd', 'e', 'e', 'p', 's', 'e', 'r', 'v', 'e', '.', 'i', 'n', 'f', 'o', '\0', /* "deepzz.com", true */ 'd', 'e', 'e', 'p', 'z', 'z', '.', 'c', 'o', 'm', '\0', /* "deer.team", true */ 'd', 'e', 'e', 'r', '.', 't', 'e', 'a', 'm', '\0', - /* "deetz.nl", true */ 'd', 'e', 'e', 't', 'z', '.', 'n', 'l', '\0', /* "deezeno.com", true */ 'd', 'e', 'e', 'z', 'e', 'n', 'o', '.', 'c', 'o', 'm', '\0', /* "def-pos.ru", true */ 'd', 'e', 'f', '-', 'p', 'o', 's', '.', 'r', 'u', '\0', /* "defcon.org", true */ 'd', 'e', 'f', 'c', 'o', 'n', '.', 'o', 'r', 'g', '\0', @@ -3586,6 +3585,7 @@ static const char kSTSHostTable[] = { /* "dhome.at", true */ 'd', 'h', 'o', 'm', 'e', '.', 'a', 't', '\0', /* "dhuy.net", true */ 'd', 'h', 'u', 'y', '.', 'n', 'e', 't', '\0', /* "diagnostix.org", true */ 'd', 'i', 'a', 'g', 'n', 'o', 's', 't', 'i', 'x', '.', 'o', 'r', 'g', '\0', + /* "diamante.ro", true */ 'd', 'i', 'a', 'm', 'a', 'n', 't', 'e', '.', 'r', 'o', '\0', /* "dianefriedli.ch", true */ 'd', 'i', 'a', 'n', 'e', 'f', 'r', 'i', 'e', 'd', 'l', 'i', '.', 'c', 'h', '\0', /* "dianlujitao.com", true */ 'd', 'i', 'a', 'n', 'l', 'u', 'j', 'i', 't', 'a', 'o', '.', 'c', 'o', 'm', '\0', /* "diare-na-miru.cz", true */ 'd', 'i', 'a', 'r', 'e', '-', 'n', 'a', '-', 'm', 'i', 'r', 'u', '.', 'c', 'z', '\0', @@ -3716,7 +3716,6 @@ static const char kSTSHostTable[] = { /* "djangoproject.com", true */ 'd', 'j', 'a', 'n', 'g', 'o', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0', /* "djangosnippets.org", true */ 'd', 'j', 'a', 'n', 'g', 'o', 's', 'n', 'i', 'p', 'p', 'e', 't', 's', '.', 'o', 'r', 'g', '\0', /* "djlive.pl", true */ 'd', 'j', 'l', 'i', 'v', 'e', '.', 'p', 'l', '\0', - /* "djlnetworks.co.uk", true */ 'd', 'j', 'l', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "djul.net", true */ 'd', 'j', 'u', 'l', '.', 'n', 'e', 't', '\0', /* "djxmmx.net", false */ 'd', 'j', 'x', 'm', 'm', 'x', '.', 'n', 'e', 't', '\0', /* "dk.search.yahoo.com", false */ 'd', 'k', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0', @@ -3869,7 +3868,6 @@ static const char kSTSHostTable[] = { /* "doyoulyft.com", true */ 'd', 'o', 'y', 'o', 'u', 'l', 'y', 'f', 't', '.', 'c', 'o', 'm', '\0', /* "dpd.com.pl", true */ 'd', 'p', 'd', '.', 'c', 'o', 'm', '.', 'p', 'l', '\0', /* "dprd-wonogirikab.go.id", false */ 'd', 'p', 'r', 'd', '-', 'w', 'o', 'n', 'o', 'g', 'i', 'r', 'i', 'k', 'a', 'b', '.', 'g', 'o', '.', 'i', 'd', '\0', - /* "dpsg-roden.de", false */ 'd', 'p', 's', 'g', '-', 'r', 'o', 'd', 'e', 'n', '.', 'd', 'e', '\0', /* "dr2dr.ca", true */ 'd', 'r', '2', 'd', 'r', '.', 'c', 'a', '\0', /* "dragfiles.com", true */ 'd', 'r', 'a', 'g', 'f', 'i', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "dragon-aspect.com", true */ 'd', 'r', 'a', 'g', 'o', 'n', '-', 'a', 's', 'p', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0', @@ -3880,8 +3878,6 @@ static const char kSTSHostTable[] = { /* "dragonteam.ninja", true */ 'd', 'r', 'a', 'g', 'o', 'n', 't', 'e', 'a', 'm', '.', 'n', 'i', 'n', 'j', 'a', '\0', /* "drahcro.uk", true */ 'd', 'r', 'a', 'h', 'c', 'r', 'o', '.', 'u', 'k', '\0', /* "drainagebuizen.nl", true */ 'd', 'r', 'a', 'i', 'n', 'a', 'g', 'e', 'b', 'u', 'i', 'z', 'e', 'n', '.', 'n', 'l', '\0', - /* "drakeanddragon.com", true */ 'd', 'r', 'a', 'k', 'e', 'a', 'n', 'd', 'd', 'r', 'a', 'g', 'o', 'n', '.', 'c', 'o', 'm', '\0', - /* "drakefortreasurer.sexy", true */ 'd', 'r', 'a', 'k', 'e', 'f', 'o', 'r', 't', 'r', 'e', 'a', 's', 'u', 'r', 'e', 'r', '.', 's', 'e', 'x', 'y', '\0', /* "drakeluce.com", true */ 'd', 'r', 'a', 'k', 'e', 'l', 'u', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "drakenprospero.com", true */ 'd', 'r', 'a', 'k', 'e', 'n', 'p', 'r', 'o', 's', 'p', 'e', 'r', 'o', '.', 'c', 'o', 'm', '\0', /* "dramaticpeople.com", true */ 'd', 'r', 'a', 'm', 'a', 't', 'i', 'c', 'p', 'e', 'o', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0', @@ -3986,6 +3982,7 @@ static const char kSTSHostTable[] = { /* "durys.be", true */ 'd', 'u', 'r', 'y', 's', '.', 'b', 'e', '\0', /* "dustygroove.com", true */ 'd', 'u', 's', 't', 'y', 'g', 'r', 'o', 'o', 'v', 'e', '.', 'c', 'o', 'm', '\0', /* "dutch1.nl", true */ 'd', 'u', 't', 'c', 'h', '1', '.', 'n', 'l', '\0', + /* "dutchessuganda.com", true */ 'd', 'u', 't', 'c', 'h', 'e', 's', 's', 'u', 'g', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0', /* "dutchrank.nl", true */ 'd', 'u', 't', 'c', 'h', 'r', 'a', 'n', 'k', '.', 'n', 'l', '\0', /* "dutchwanderers.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'a', 'n', 'd', 'e', 'r', 'e', 'r', 's', '.', 'n', 'l', '\0', /* "dutchweballiance.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'e', 'b', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'n', 'l', '\0', @@ -4002,7 +3999,6 @@ static const char kSTSHostTable[] = { /* "dxgl.info", true */ 'd', 'x', 'g', 'l', '.', 'i', 'n', 'f', 'o', '\0', /* "dyeager.org", true */ 'd', 'y', 'e', 'a', 'g', 'e', 'r', '.', 'o', 'r', 'g', '\0', /* "dyktig.as", true */ 'd', 'y', 'k', 't', 'i', 'g', '.', 'a', 's', '\0', - /* "dymersion.com", true */ 'd', 'y', 'm', 'e', 'r', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "dyn-nserve.net", true */ 'd', 'y', 'n', '-', 'n', 's', 'e', 'r', 'v', 'e', '.', 'n', 'e', 't', '\0', /* "dyn.im", true */ 'd', 'y', 'n', '.', 'i', 'm', '\0', /* "dynaloop.net", true */ 'd', 'y', 'n', 'a', 'l', 'o', 'o', 'p', '.', 'n', 'e', 't', '\0', @@ -4014,6 +4010,7 @@ static const char kSTSHostTable[] = { /* "dyrkar.com", true */ 'd', 'y', 'r', 'k', 'a', 'r', '.', 'c', 'o', 'm', '\0', /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0', /* "dzndk.com", true */ 'd', 'z', 'n', 'd', 'k', '.', 'c', 'o', 'm', '\0', + /* "dzndk.net", true */ 'd', 'z', 'n', 'd', 'k', '.', 'n', 'e', 't', '\0', /* "dzyabchenko.com", true */ 'd', 'z', 'y', 'a', 'b', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0', /* "e-biografias.net", true */ 'e', '-', 'b', 'i', 'o', 'g', 'r', 'a', 'f', 'i', 'a', 's', '.', 'n', 'e', 't', '\0', /* "e-isfa.eu", true */ 'e', '-', 'i', 's', 'f', 'a', '.', 'e', 'u', '\0', @@ -4221,7 +4218,6 @@ static const char kSTSHostTable[] = { /* "elefantevoador.com", true */ 'e', 'l', 'e', 'f', 'a', 'n', 't', 'e', 'v', 'o', 'a', 'd', 'o', 'r', '.', 'c', 'o', 'm', '\0', /* "eleicoes2016.com.br", true */ 'e', 'l', 'e', 'i', 'c', 'o', 'e', 's', '2', '0', '1', '6', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "elektro-koehl.de", true */ 'e', 'l', 'e', 'k', 't', 'r', 'o', '-', 'k', 'o', 'e', 'h', 'l', '.', 'd', 'e', '\0', - /* "elektronring.com", true */ 'e', 'l', 'e', 'k', 't', 'r', 'o', 'n', 'r', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "elektropost.org", true */ 'e', 'l', 'e', 'k', 't', 'r', 'o', 'p', 'o', 's', 't', '.', 'o', 'r', 'g', '\0', /* "element-43.com", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', '-', '4', '3', '.', 'c', 'o', 'm', '\0', /* "elemental.software", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', 'a', 'l', '.', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '\0', @@ -4305,6 +4301,7 @@ static const char kSTSHostTable[] = { /* "encredible.org", false */ 'e', 'n', 'c', 'r', 'e', 'd', 'i', 'b', 'l', 'e', '.', 'o', 'r', 'g', '\0', /* "encryptallthethings.net", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'a', 'l', 'l', 't', 'h', 'e', 't', 'h', 'i', 'n', 'g', 's', '.', 'n', 'e', 't', '\0', /* "encrypted.google.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'e', 'd', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0', + /* "encryptedaudience.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'e', 'd', 'a', 'u', 'd', 'i', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "encryptio.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'i', 'o', '.', 'c', 'o', 'm', '\0', /* "endeal.nl", true */ 'e', 'n', 'd', 'e', 'a', 'l', '.', 'n', 'l', '\0', /* "ender.co.at", true */ 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', '.', 'a', 't', '\0', @@ -4410,6 +4407,7 @@ static const char kSTSHostTable[] = { /* "ericyl.com", true */ 'e', 'r', 'i', 'c', 'y', 'l', '.', 'c', 'o', 'm', '\0', /* "erigrid.eu", true */ 'e', 'r', 'i', 'g', 'r', 'i', 'd', '.', 'e', 'u', '\0', /* "eriix.org", true */ 'e', 'r', 'i', 'i', 'x', '.', 'o', 'r', 'g', '\0', + /* "erikhubers.nl", true */ 'e', 'r', 'i', 'k', 'h', 'u', 'b', 'e', 'r', 's', '.', 'n', 'l', '\0', /* "erikseth.de", true */ 'e', 'r', 'i', 'k', 's', 'e', 't', 'h', '.', 'd', 'e', '\0', /* "eriner.me", true */ 'e', 'r', 'i', 'n', 'e', 'r', '.', 'm', 'e', '\0', /* "erisrenee.com", true */ 'e', 'r', 'i', 's', 'r', 'e', 'n', 'e', 'e', '.', 'c', 'o', 'm', '\0', @@ -4494,7 +4492,7 @@ static const char kSTSHostTable[] = { /* "ethitter.com", true */ 'e', 't', 'h', 'i', 't', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "ethlan.fr", true */ 'e', 't', 'h', 'l', 'a', 'n', '.', 'f', 'r', '\0', /* "ethosinfo.com", true */ 'e', 't', 'h', 'o', 's', 'i', 'n', 'f', 'o', '.', 'c', 'o', 'm', '\0', - /* "etidni.help", true */ 'e', 't', 'i', 'd', 'n', 'i', '.', 'h', 'e', 'l', 'p', '\0', + /* "etidni.help", false */ 'e', 't', 'i', 'd', 'n', 'i', '.', 'h', 'e', 'l', 'p', '\0', /* "etkaddict.com", true */ 'e', 't', 'k', 'a', 'd', 'd', 'i', 'c', 't', '.', 'c', 'o', 'm', '\0', /* "etmirror.top", true */ 'e', 't', 'm', 'i', 'r', 'r', 'o', 'r', '.', 't', 'o', 'p', '\0', /* "etmirror.xyz", true */ 'e', 't', 'm', 'i', 'r', 'r', 'o', 'r', '.', 'x', 'y', 'z', '\0', @@ -4592,6 +4590,7 @@ static const char kSTSHostTable[] = { /* "exousiakaidunamis.xyz", true */ 'e', 'x', 'o', 'u', 's', 'i', 'a', 'k', 'a', 'i', 'd', 'u', 'n', 'a', 'm', 'i', 's', '.', 'x', 'y', 'z', '\0', /* "exp.de", true */ 'e', 'x', 'p', '.', 'd', 'e', '\0', /* "expancio.com", true */ 'e', 'x', 'p', 'a', 'n', 'c', 'i', 'o', '.', 'c', 'o', 'm', '\0', + /* "expatads.com", true */ 'e', 'x', 'p', 'a', 't', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0', /* "experienceoz.com.au", true */ 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'o', 'z', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "experteasy.com.au", true */ 'e', 'x', 'p', 'e', 'r', 't', 'e', 'a', 's', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "experts-en-gestion.fr", true */ 'e', 'x', 'p', 'e', 'r', 't', 's', '-', 'e', 'n', '-', 'g', 'e', 's', 't', 'i', 'o', 'n', '.', 'f', 'r', '\0', @@ -4699,7 +4698,6 @@ static const char kSTSHostTable[] = { /* "fangs.ink", true */ 'f', 'a', 'n', 'g', 's', '.', 'i', 'n', 'k', '\0', /* "fanjoe.be", true */ 'f', 'a', 'n', 'j', 'o', 'e', '.', 'b', 'e', '\0', /* "fant.dk", true */ 'f', 'a', 'n', 't', '.', 'd', 'k', '\0', - /* "fantopia.club", true */ 'f', 'a', 'n', 't', 'o', 'p', 'i', 'a', '.', 'c', 'l', 'u', 'b', '\0', /* "fanvoice.com", true */ 'f', 'a', 'n', 'v', 'o', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "fanyue123.tk", true */ 'f', 'a', 'n', 'y', 'u', 'e', '1', '2', '3', '.', 't', 'k', '\0', /* "fanz.pro", true */ 'f', 'a', 'n', 'z', '.', 'p', 'r', 'o', '\0', @@ -4733,7 +4731,6 @@ static const char kSTSHostTable[] = { /* "fastaim.de", true */ 'f', 'a', 's', 't', 'a', 'i', 'm', '.', 'd', 'e', '\0', /* "fastcomcorp.com", true */ 'f', 'a', 's', 't', 'c', 'o', 'm', 'c', 'o', 'r', 'p', '.', 'c', 'o', 'm', '\0', /* "fastcomcorp.net", true */ 'f', 'a', 's', 't', 'c', 'o', 'm', 'c', 'o', 'r', 'p', '.', 'n', 'e', 't', '\0', - /* "fastconfirm.com", true */ 'f', 'a', 's', 't', 'c', 'o', 'n', 'f', 'i', 'r', 'm', '.', 'c', 'o', 'm', '\0', /* "fastdigitizing.com", true */ 'f', 'a', 's', 't', 'd', 'i', 'g', 'i', 't', 'i', 'z', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "fastmail.com", false */ 'f', 'a', 's', 't', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0', /* "fatwin.pw", true */ 'f', 'a', 't', 'w', 'i', 'n', '.', 'p', 'w', '\0', @@ -4818,6 +4815,7 @@ static const char kSTSHostTable[] = { /* "fiendishmasterplan.com", true */ 'f', 'i', 'e', 'n', 'd', 'i', 's', 'h', 'm', 'a', 's', 't', 'e', 'r', 'p', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "fierlafijn.net", true */ 'f', 'i', 'e', 'r', 'l', 'a', 'f', 'i', 'j', 'n', '.', 'n', 'e', 't', '\0', /* "fierman.eu", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'e', 'u', '\0', + /* "fierman.net", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0', /* "fierman.us", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'u', 's', '\0', /* "figurasdelinguagem.com.br", true */ 'f', 'i', 'g', 'u', 'r', 'a', 's', 'd', 'e', 'l', 'i', 'n', 'g', 'u', 'a', 'g', 'e', 'm', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "figuurzagers.nl", false */ 'f', 'i', 'g', 'u', 'u', 'r', 'z', 'a', 'g', 'e', 'r', 's', '.', 'n', 'l', '\0', @@ -5069,7 +5067,6 @@ static const char kSTSHostTable[] = { /* "frankhaala.com", true */ 'f', 'r', 'a', 'n', 'k', 'h', 'a', 'a', 'l', 'a', '.', 'c', 'o', 'm', '\0', /* "frankierprofi.de", true */ 'f', 'r', 'a', 'n', 'k', 'i', 'e', 'r', 'p', 'r', 'o', 'f', 'i', '.', 'd', 'e', '\0', /* "frankl.in", true */ 'f', 'r', 'a', 'n', 'k', 'l', '.', 'i', 'n', '\0', - /* "frankwei.xyz", true */ 'f', 'r', 'a', 'n', 'k', 'w', 'e', 'i', '.', 'x', 'y', 'z', '\0', /* "fransallen.com", true */ 'f', 'r', 'a', 'n', 's', 'a', 'l', 'l', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "frantic1048.com", true */ 'f', 'r', 'a', 'n', 't', 'i', 'c', '1', '0', '4', '8', '.', 'c', 'o', 'm', '\0', /* "frappant.cc", true */ 'f', 'r', 'a', 'p', 'p', 'a', 'n', 't', '.', 'c', 'c', '\0', @@ -5186,6 +5183,7 @@ static const char kSTSHostTable[] = { /* "funi4u.com", true */ 'f', 'u', 'n', 'i', '4', 'u', '.', 'c', 'o', 'm', '\0', /* "funktionel.co", true */ 'f', 'u', 'n', 'k', 't', 'i', 'o', 'n', 'e', 'l', '.', 'c', 'o', '\0', /* "funny-stamps.de", true */ 'f', 'u', 'n', 'n', 'y', '-', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0', + /* "funnyang.com", true */ 'f', 'u', 'n', 'n', 'y', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "funnystamps.de", true */ 'f', 'u', 'n', 'n', 'y', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0', /* "funstamps.de", true */ 'f', 'u', 'n', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0', /* "funstempel.de", true */ 'f', 'u', 'n', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0', @@ -5616,6 +5614,7 @@ static const char kSTSHostTable[] = { /* "govtrack.us", true */ 'g', 'o', 'v', 't', 'r', 'a', 'c', 'k', '.', 'u', 's', '\0', /* "gowe.wang", false */ 'g', 'o', 'w', 'e', '.', 'w', 'a', 'n', 'g', '\0', /* "gpcsolutions.fr", true */ 'g', 'p', 'c', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'f', 'r', '\0', + /* "gpfclan.de", true */ 'g', 'p', 'f', 'c', 'l', 'a', 'n', '.', 'd', 'e', '\0', /* "gplintegratedit.com", true */ 'g', 'p', 'l', 'i', 'n', 't', 'e', 'g', 'r', 'a', 't', 'e', 'd', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "gpo.gov", false */ 'g', 'p', 'o', '.', 'g', 'o', 'v', '\0', /* "gprs.uk.com", true */ 'g', 'p', 'r', 's', '.', 'u', 'k', '.', 'c', 'o', 'm', '\0', @@ -5772,6 +5771,7 @@ static const char kSTSHostTable[] = { /* "guhenry3.tk", true */ 'g', 'u', 'h', 'e', 'n', 'r', 'y', '3', '.', 't', 'k', '\0', /* "guideo.ch", true */ 'g', 'u', 'i', 'd', 'e', 'o', '.', 'c', 'h', '\0', /* "guidetoiceland.is", false */ 'g', 'u', 'i', 'd', 'e', 't', 'o', 'i', 'c', 'e', 'l', 'a', 'n', 'd', '.', 'i', 's', '\0', + /* "guildgearscore.cf", true */ 'g', 'u', 'i', 'l', 'd', 'g', 'e', 'a', 'r', 's', 'c', 'o', 'r', 'e', '.', 'c', 'f', '\0', /* "guillaume-leduc.fr", true */ 'g', 'u', 'i', 'l', 'l', 'a', 'u', 'm', 'e', '-', 'l', 'e', 'd', 'u', 'c', '.', 'f', 'r', '\0', /* "guillaumeperrin.io", true */ 'g', 'u', 'i', 'l', 'l', 'a', 'u', 'm', 'e', 'p', 'e', 'r', 'r', 'i', 'n', '.', 'i', 'o', '\0', /* "guinea-pig.co", true */ 'g', 'u', 'i', 'n', 'e', 'a', '-', 'p', 'i', 'g', '.', 'c', 'o', '\0', @@ -5793,6 +5793,7 @@ static const char kSTSHostTable[] = { /* "gus.host", true */ 'g', 'u', 's', '.', 'h', 'o', 's', 't', '\0', /* "gus.moe", true */ 'g', 'u', 's', '.', 'm', 'o', 'e', '\0', /* "guscaplan.me", true */ 'g', 'u', 's', 'c', 'a', 'p', 'l', 'a', 'n', '.', 'm', 'e', '\0', + /* "guso.ml", true */ 'g', 'u', 's', 'o', '.', 'm', 'l', '\0', /* "guthabenkarten-billiger.de", true */ 'g', 'u', 't', 'h', 'a', 'b', 'e', 'n', 'k', 'a', 'r', 't', 'e', 'n', '-', 'b', 'i', 'l', 'l', 'i', 'g', 'e', 'r', '.', 'd', 'e', '\0', /* "guts.me", true */ 'g', 'u', 't', 's', '.', 'm', 'e', '\0', /* "guvernalternativa.ro", true */ 'g', 'u', 'v', 'e', 'r', 'n', 'a', 'l', 't', 'e', 'r', 'n', 'a', 't', 'i', 'v', 'a', '.', 'r', 'o', '\0', @@ -5811,6 +5812,7 @@ static const char kSTSHostTable[] = { /* "gz-benz.com", true */ 'g', 'z', '-', 'b', 'e', 'n', 'z', '.', 'c', 'o', 'm', '\0', /* "gz-bmw.com", true */ 'g', 'z', '-', 'b', 'm', 'w', '.', 'c', 'o', 'm', '\0', /* "gza.jp", true */ 'g', 'z', 'a', '.', 'j', 'p', '\0', + /* "gzitech.com", true */ 'g', 'z', 'i', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0', /* "h-jo.net", true */ 'h', '-', 'j', 'o', '.', 'n', 'e', 't', '\0', /* "h-og.com", true */ 'h', '-', 'o', 'g', '.', 'c', 'o', 'm', '\0', /* "h-rickroll-n.pw", true */ 'h', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'n', '.', 'p', 'w', '\0', @@ -5831,7 +5833,6 @@ static const char kSTSHostTable[] = { /* "hackenturet.dk", true */ 'h', 'a', 'c', 'k', 'e', 'n', 't', 'u', 'r', 'e', 't', '.', 'd', 'k', '\0', /* "hacker.parts", true */ 'h', 'a', 'c', 'k', 'e', 'r', '.', 'p', 'a', 'r', 't', 's', '\0', /* "hacker1.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', '1', '.', 'c', 'o', 'm', '\0', - /* "hackerchai.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'c', 'h', 'a', 'i', '.', 'c', 'o', 'm', '\0', /* "hackernet.se", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'n', 'e', 't', '.', 's', 'e', '\0', /* "hackerone-user-content.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'o', 'n', 'e', '-', 'u', 's', 'e', 'r', '-', 'c', 'o', 'n', 't', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0', /* "hackerone.com", true */ 'h', 'a', 'c', 'k', 'e', 'r', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0', @@ -5905,6 +5906,7 @@ static const char kSTSHostTable[] = { /* "hardeman.nu", true */ 'h', 'a', 'r', 'd', 'e', 'm', 'a', 'n', '.', 'n', 'u', '\0', /* "hardenize.com", true */ 'h', 'a', 'r', 'd', 'e', 'n', 'i', 'z', 'e', '.', 'c', 'o', 'm', '\0', /* "hardertimes.com", true */ 'h', 'a', 'r', 'd', 'e', 'r', 't', 'i', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0', + /* "hardfalcon.net", true */ 'h', 'a', 'r', 'd', 'f', 'a', 'l', 'c', 'o', 'n', '.', 'n', 'e', 't', '\0', /* "hardh.at", true */ 'h', 'a', 'r', 'd', 'h', '.', 'a', 't', '\0', /* "hardtfrieden.de", true */ 'h', 'a', 'r', 'd', 't', 'f', 'r', 'i', 'e', 'd', 'e', 'n', '.', 'd', 'e', '\0', /* "harlentimberproducts.co.uk", true */ 'h', 'a', 'r', 'l', 'e', 'n', 't', 'i', 'm', 'b', 'e', 'r', 'p', 'r', 'o', 'd', 'u', 'c', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', @@ -5912,6 +5914,7 @@ static const char kSTSHostTable[] = { /* "harmoney.com", true */ 'h', 'a', 'r', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "harmoney.com.au", true */ 'h', 'a', 'r', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "harringtonca.com", true */ 'h', 'a', 'r', 'r', 'i', 'n', 'g', 't', 'o', 'n', 'c', 'a', '.', 'c', 'o', 'm', '\0', + /* "harrisonsand.com", false */ 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', 's', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0', /* "harrisonsdirect.co.uk", true */ 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', 's', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "harrisonswebsites.com", true */ 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', 's', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "harrysmallbones.co.uk", true */ 'h', 'a', 'r', 'r', 'y', 's', 'm', 'a', 'l', 'l', 'b', 'o', 'n', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', @@ -6225,7 +6228,6 @@ static const char kSTSHostTable[] = { /* "hostfission.com", true */ 'h', 'o', 's', 't', 'f', 'i', 's', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "hostingactive.it", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'a', 'c', 't', 'i', 'v', 'e', '.', 'i', 't', '\0', /* "hostingfj.com", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'f', 'j', '.', 'c', 'o', 'm', '\0', - /* "hostinghelp.guru", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'h', 'e', 'l', 'p', '.', 'g', 'u', 'r', 'u', '\0', /* "hostinginnederland.nl", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'i', 'n', 'n', 'e', 'd', 'e', 'r', 'l', 'a', 'n', 'd', '.', 'n', 'l', '\0', /* "hostix.de", true */ 'h', 'o', 's', 't', 'i', 'x', '.', 'd', 'e', '\0', /* "hostma.ma", true */ 'h', 'o', 's', 't', 'm', 'a', '.', 'm', 'a', '\0', @@ -6321,6 +6323,7 @@ static const char kSTSHostTable[] = { /* "hunter.io", true */ 'h', 'u', 'n', 't', 'e', 'r', '.', 'i', 'o', '\0', /* "huodongweb.com", true */ 'h', 'u', 'o', 'd', 'o', 'n', 'g', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0', /* "hup.blue", true */ 'h', 'u', 'p', '.', 'b', 'l', 'u', 'e', '\0', + /* "hupp.se", true */ 'h', 'u', 'p', 'p', '.', 's', 'e', '\0', /* "hurd.is", true */ 'h', 'u', 'r', 'd', '.', 'i', 's', '\0', /* "huren.nl", true */ 'h', 'u', 'r', 'e', 'n', '.', 'n', 'l', '\0', /* "huroji.com", true */ 'h', 'u', 'r', 'o', 'j', 'i', '.', 'c', 'o', 'm', '\0', @@ -6477,6 +6480,7 @@ static const char kSTSHostTable[] = { /* "ikarate.ru", true */ 'i', 'k', 'a', 'r', 'a', 't', 'e', '.', 'r', 'u', '\0', /* "ikeyless.com", true */ 'i', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'c', 'o', 'm', '\0', /* "ikk.me", true */ 'i', 'k', 'k', '.', 'm', 'e', '\0', + /* "ikkatsu-satei.jp", true */ 'i', 'k', 'k', 'a', 't', 's', 'u', '-', 's', 'a', 't', 'e', 'i', '.', 'j', 'p', '\0', /* "iklive.org", false */ 'i', 'k', 'l', 'i', 'v', 'e', '.', 'o', 'r', 'g', '\0', /* "ikocik.sk", true */ 'i', 'k', 'o', 'c', 'i', 'k', '.', 's', 'k', '\0', /* "ikon.name", true */ 'i', 'k', 'o', 'n', '.', 'n', 'a', 'm', 'e', '\0', @@ -6623,6 +6627,7 @@ static const char kSTSHostTable[] = { /* "inoa8.com", true */ 'i', 'n', 'o', 'a', '8', '.', 'c', 'o', 'm', '\0', /* "inovatec.com", true */ 'i', 'n', 'o', 'v', 'a', 't', 'e', 'c', '.', 'c', 'o', 'm', '\0', /* "inquisitive.io", true */ 'i', 'n', 'q', 'u', 'i', 's', 'i', 't', 'i', 'v', 'e', '.', 'i', 'o', '\0', + /* "insane-bullets.com", true */ 'i', 'n', 's', 'a', 'n', 'e', '-', 'b', 'u', 'l', 'l', 'e', 't', 's', '.', 'c', 'o', 'm', '\0', /* "insertcoins.net", true */ 'i', 'n', 's', 'e', 'r', 't', 'c', 'o', 'i', 'n', 's', '.', 'n', 'e', 't', '\0', /* "insideaudit.com", true */ 'i', 'n', 's', 'i', 'd', 'e', 'a', 'u', 'd', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "insightera.co.th", true */ 'i', 'n', 's', 'i', 'g', 'h', 't', 'e', 'r', 'a', '.', 'c', 'o', '.', 't', 'h', '\0', @@ -6641,6 +6646,7 @@ static const char kSTSHostTable[] = { /* "instantkhabar.com", false */ 'i', 'n', 's', 't', 'a', 'n', 't', 'k', 'h', 'a', 'b', 'a', 'r', '.', 'c', 'o', 'm', '\0', /* "instantsubs.de", true */ 'i', 'n', 's', 't', 'a', 'n', 't', 's', 'u', 'b', 's', '.', 'd', 'e', '\0', /* "instasex.ch", true */ 'i', 'n', 's', 't', 'a', 's', 'e', 'x', '.', 'c', 'h', '\0', + /* "instela.com", true */ 'i', 'n', 's', 't', 'e', 'l', 'a', '.', 'c', 'o', 'm', '\0', /* "instics.com", true */ 'i', 'n', 's', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0', /* "instinctiveads.com", true */ 'i', 'n', 's', 't', 'i', 'n', 'c', 't', 'i', 'v', 'e', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0', /* "institut-confucius-montpellier.org", true */ 'i', 'n', 's', 't', 'i', 't', 'u', 't', '-', 'c', 'o', 'n', 'f', 'u', 'c', 'i', 'u', 's', '-', 'm', 'o', 'n', 't', 'p', 'e', 'l', 'l', 'i', 'e', 'r', '.', 'o', 'r', 'g', '\0', @@ -6703,7 +6709,7 @@ static const char kSTSHostTable[] = { /* "intranetsec-regionra.fr", true */ 'i', 'n', 't', 'r', 'a', 'n', 'e', 't', 's', 'e', 'c', '-', 'r', 'e', 'g', 'i', 'o', 'n', 'r', 'a', '.', 'f', 'r', '\0', /* "intranetsec.fr", true */ 'i', 'n', 't', 'r', 'a', 'n', 'e', 't', 's', 'e', 'c', '.', 'f', 'r', '\0', /* "intrasoft.com.au", true */ 'i', 'n', 't', 'r', 'a', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', - /* "intux.be", true */ 'i', 'n', 't', 'u', 'x', '.', 'b', 'e', '\0', + /* "intux.be", false */ 'i', 'n', 't', 'u', 'x', '.', 'b', 'e', '\0', /* "intvonline.com", true */ 'i', 'n', 't', 'v', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "intxt.net", true */ 'i', 'n', 't', 'x', 't', '.', 'n', 'e', 't', '\0', /* "inusasha.de", true */ 'i', 'n', 'u', 's', 'a', 's', 'h', 'a', '.', 'd', 'e', '\0', @@ -7201,6 +7207,7 @@ static const char kSTSHostTable[] = { /* "joran.org", true */ 'j', 'o', 'r', 'a', 'n', '.', 'o', 'r', 'g', '\0', /* "jordans.co.uk", true */ 'j', 'o', 'r', 'd', 'a', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "jorgemesa.me", true */ 'j', 'o', 'r', 'g', 'e', 'm', 'e', 's', 'a', '.', 'm', 'e', '\0', + /* "jornadasciberdefensa2016.es", true */ 'j', 'o', 'r', 'n', 'a', 'd', 'a', 's', 'c', 'i', 'b', 'e', 'r', 'd', 'e', 'f', 'e', 'n', 's', 'a', '2', '0', '1', '6', '.', 'e', 's', '\0', /* "jornane.me", true */ 'j', 'o', 'r', 'n', 'a', 'n', 'e', '.', 'm', 'e', '\0', /* "jornane.nl", true */ 'j', 'o', 'r', 'n', 'a', 'n', 'e', '.', 'n', 'l', '\0', /* "jornane.no", true */ 'j', 'o', 'r', 'n', 'a', 'n', 'e', '.', 'n', 'o', '\0', @@ -7269,6 +7276,7 @@ static const char kSTSHostTable[] = { /* "jurko.cz", true */ 'j', 'u', 'r', 'k', 'o', '.', 'c', 'z', '\0', /* "jurriaan.ninja", true */ 'j', 'u', 'r', 'r', 'i', 'a', 'a', 'n', '.', 'n', 'i', 'n', 'j', 'a', '\0', /* "just-a-clanpage.de", true */ 'j', 'u', 's', 't', '-', 'a', '-', 'c', 'l', 'a', 'n', 'p', 'a', 'g', 'e', '.', 'd', 'e', '\0', + /* "justanothercompany.name", true */ 'j', 'u', 's', 't', 'a', 'n', 'o', 't', 'h', 'e', 'r', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '.', 'n', 'a', 'm', 'e', '\0', /* "justchunks.net", true */ 'j', 'u', 's', 't', 'c', 'h', 'u', 'n', 'k', 's', '.', 'n', 'e', 't', '\0', /* "justice4assange.com", true */ 'j', 'u', 's', 't', 'i', 'c', 'e', '4', 'a', 's', 's', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0', /* "justinharrison.ca", true */ 'j', 'u', 's', 't', 'i', 'n', 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', '.', 'c', 'a', '\0', @@ -7317,7 +7325,6 @@ static const char kSTSHostTable[] = { /* "kakao-karten.de", true */ 'k', 'a', 'k', 'a', 'o', '-', 'k', 'a', 'r', 't', 'e', 'n', '.', 'd', 'e', '\0', /* "kakaomilchkuh.de", true */ 'k', 'a', 'k', 'a', 'o', 'm', 'i', 'l', 'c', 'h', 'k', 'u', 'h', '.', 'd', 'e', '\0', /* "kakaravaara.fi", true */ 'k', 'a', 'k', 'a', 'r', 'a', 'v', 'a', 'a', 'r', 'a', '.', 'f', 'i', '\0', - /* "kaleidomarketing.com", true */ 'k', 'a', 'l', 'e', 'i', 'd', 'o', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "kalender.com", true */ 'k', 'a', 'l', 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "kalevlamps.co.uk", true */ 'k', 'a', 'l', 'e', 'v', 'l', 'a', 'm', 'p', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "kaliaa.fi", true */ 'k', 'a', 'l', 'i', 'a', 'a', '.', 'f', 'i', '\0', @@ -7742,6 +7749,7 @@ static const char kSTSHostTable[] = { /* "krizevackapajdasija.hr", true */ 'k', 'r', 'i', 'z', 'e', 'v', 'a', 'c', 'k', 'a', 'p', 'a', 'j', 'd', 'a', 's', 'i', 'j', 'a', '.', 'h', 'r', '\0', /* "krizevci.info", true */ 'k', 'r', 'i', 'z', 'e', 'v', 'c', 'i', '.', 'i', 'n', 'f', 'o', '\0', /* "krk-media.pl", false */ 'k', 'r', 'k', '-', 'm', 'e', 'd', 'i', 'a', '.', 'p', 'l', '\0', + /* "krmela.com", true */ 'k', 'r', 'm', 'e', 'l', 'a', '.', 'c', 'o', 'm', '\0', /* "krmeni.cz", true */ 'k', 'r', 'm', 'e', 'n', 'i', '.', 'c', 'z', '\0', /* "kromonos.net", true */ 'k', 'r', 'o', 'm', 'o', 'n', 'o', 's', '.', 'n', 'e', 't', '\0', /* "krony.de", true */ 'k', 'r', 'o', 'n', 'y', '.', 'd', 'e', '\0', @@ -7754,6 +7762,7 @@ static const char kSTSHostTable[] = { /* "kryptera.se", true */ 'k', 'r', 'y', 'p', 't', 'e', 'r', 'a', '.', 's', 'e', '\0', /* "kryx.de", true */ 'k', 'r', 'y', 'x', '.', 'd', 'e', '\0', /* "ks-watch.de", true */ 'k', 's', '-', 'w', 'a', 't', 'c', 'h', '.', 'd', 'e', '\0', + /* "kschv-rdeck.de", true */ 'k', 's', 'c', 'h', 'v', '-', 'r', 'd', 'e', 'c', 'k', '.', 'd', 'e', '\0', /* "kshlm.in", true */ 'k', 's', 'h', 'l', 'm', '.', 'i', 'n', '\0', /* "ku.io", true */ 'k', 'u', '.', 'i', 'o', '\0', /* "kualo.co.uk", true */ 'k', 'u', 'a', 'l', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0', @@ -8098,6 +8107,7 @@ static const char kSTSHostTable[] = { /* "librelamp.com", true */ 'l', 'i', 'b', 'r', 'e', 'l', 'a', 'm', 'p', '.', 'c', 'o', 'm', '\0', /* "librends.org", true */ 'l', 'i', 'b', 'r', 'e', 'n', 'd', 's', '.', 'o', 'r', 'g', '\0', /* "librervac.org", true */ 'l', 'i', 'b', 'r', 'e', 'r', 'v', 'a', 'c', '.', 'o', 'r', 'g', '\0', + /* "libscode.com", false */ 'l', 'i', 'b', 's', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0', /* "libskia.so", true */ 'l', 'i', 'b', 's', 'k', 'i', 'a', '.', 's', 'o', '\0', /* "libsodium.org", true */ 'l', 'i', 'b', 's', 'o', 'd', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0', /* "liceserv.com", true */ 'l', 'i', 'c', 'e', 's', 'e', 'r', 'v', '.', 'c', 'o', 'm', '\0', @@ -8464,6 +8474,7 @@ static const char kSTSHostTable[] = { /* "mac1.net", true */ 'm', 'a', 'c', '1', '.', 'n', 'e', 't', '\0', /* "macaque.io", false */ 'm', 'a', 'c', 'a', 'q', 'u', 'e', '.', 'i', 'o', '\0', /* "macbolo.com", true */ 'm', 'a', 'c', 'b', 'o', 'l', 'o', '.', 'c', 'o', 'm', '\0', + /* "macchedil.com", false */ 'm', 'a', 'c', 'c', 'h', 'e', 'd', 'i', 'l', '.', 'c', 'o', 'm', '\0', /* "mach-politik.ch", true */ 'm', 'a', 'c', 'h', '-', 'p', 'o', 'l', 'i', 't', 'i', 'k', '.', 'c', 'h', '\0', /* "machbach.com", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0', /* "machbach.net", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'n', 'e', 't', '\0', @@ -8475,7 +8486,6 @@ static const char kSTSHostTable[] = { /* "macleod.io", true */ 'm', 'a', 'c', 'l', 'e', 'o', 'd', '.', 'i', 'o', '\0', /* "macnemo.de", true */ 'm', 'a', 'c', 'n', 'e', 'm', 'o', '.', 'd', 'e', '\0', /* "maco.org.uk", true */ 'm', 'a', 'c', 'o', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0', - /* "macosxfilerecovery.com", true */ 'm', 'a', 'c', 'o', 's', 'x', 'f', 'i', 'l', 'e', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0', /* "macoun.de", true */ 'm', 'a', 'c', 'o', 'u', 'n', '.', 'd', 'e', '\0', /* "maddi.biz", true */ 'm', 'a', 'd', 'd', 'i', '.', 'b', 'i', 'z', '\0', /* "madebyshore.com", true */ 'm', 'a', 'd', 'e', 'b', 'y', 's', 'h', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0', @@ -8649,12 +8659,12 @@ static const char kSTSHostTable[] = { /* "markoh.co.uk", true */ 'm', 'a', 'r', 'k', 'o', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "markom.rs", true */ 'm', 'a', 'r', 'k', 'o', 'm', '.', 'r', 's', '\0', /* "markorszulak.com", true */ 'm', 'a', 'r', 'k', 'o', 'r', 's', 'z', 'u', 'l', 'a', 'k', '.', 'c', 'o', 'm', '\0', + /* "markprof.ru", true */ 'm', 'a', 'r', 'k', 'p', 'r', 'o', 'f', '.', 'r', 'u', '\0', /* "markri.nl", false */ 'm', 'a', 'r', 'k', 'r', 'i', '.', 'n', 'l', '\0', /* "marksill.com", true */ 'm', 'a', 'r', 'k', 's', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0', /* "marksouthall.com", true */ 'm', 'a', 'r', 'k', 's', 'o', 'u', 't', 'h', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0', /* "markt-heiligenstadt.de", true */ 'm', 'a', 'r', 'k', 't', '-', 'h', 'e', 'i', 'l', 'i', 'g', 'e', 'n', 's', 't', 'a', 'd', 't', '.', 'd', 'e', '\0', /* "marktcontact.com", true */ 'm', 'a', 'r', 'k', 't', 'c', 'o', 'n', 't', 'a', 'c', 't', '.', 'c', 'o', 'm', '\0', - /* "marktissink.nl", true */ 'm', 'a', 'r', 'k', 't', 'i', 's', 's', 'i', 'n', 'k', '.', 'n', 'l', '\0', /* "markusehrlicher.de", true */ 'm', 'a', 'r', 'k', 'u', 's', 'e', 'h', 'r', 'l', 'i', 'c', 'h', 'e', 'r', '.', 'd', 'e', '\0', /* "markuskeppeler.no-ip.biz", true */ 'm', 'a', 'r', 'k', 'u', 's', 'k', 'e', 'p', 'p', 'e', 'l', 'e', 'r', '.', 'n', 'o', '-', 'i', 'p', '.', 'b', 'i', 'z', '\0', /* "markusueberallassetmanagement.de", true */ 'm', 'a', 'r', 'k', 'u', 's', 'u', 'e', 'b', 'e', 'r', 'a', 'l', 'l', 'a', 's', 's', 'e', 't', 'm', 'a', 'n', 'a', 'g', 'e', 'm', 'e', 'n', 't', '.', 'd', 'e', '\0', @@ -8787,6 +8797,7 @@ static const char kSTSHostTable[] = { /* "mcgarderen.nl", true */ 'm', 'c', 'g', 'a', 'r', 'd', 'e', 'r', 'e', 'n', '.', 'n', 'l', '\0', /* "mchopkins.net", true */ 'm', 'c', 'h', 'o', 'p', 'k', 'i', 'n', 's', '.', 'n', 'e', 't', '\0', /* "mchristopher.com", true */ 'm', 'c', 'h', 'r', 'i', 's', 't', 'o', 'p', 'h', 'e', 'r', '.', 'c', 'o', 'm', '\0', + /* "mcjackk77.com", true */ 'm', 'c', 'j', 'a', 'c', 'k', 'k', '7', '7', '.', 'c', 'o', 'm', '\0', /* "mckinley.school", false */ 'm', 'c', 'k', 'i', 'n', 'l', 'e', 'y', '.', 's', 'c', 'h', 'o', 'o', 'l', '\0', /* "mckinley1.com", false */ 'm', 'c', 'k', 'i', 'n', 'l', 'e', 'y', '1', '.', 'c', 'o', 'm', '\0', /* "mcl.gg", true */ 'm', 'c', 'l', '.', 'g', 'g', '\0', @@ -9209,6 +9220,7 @@ static const char kSTSHostTable[] = { /* "moegirl.org", true */ 'm', 'o', 'e', 'g', 'i', 'r', 'l', '.', 'o', 'r', 'g', '\0', /* "moehrke.cc", true */ 'm', 'o', 'e', 'h', 'r', 'k', 'e', '.', 'c', 'c', '\0', /* "moevenpick-cafe.com", true */ 'm', 'o', 'e', 'v', 'e', 'n', 'p', 'i', 'c', 'k', '-', 'c', 'a', 'f', 'e', '.', 'c', 'o', 'm', '\0', + /* "moho.kr", true */ 'm', 'o', 'h', 'o', '.', 'k', 'r', '\0', /* "mojaknjiznica.com", false */ 'm', 'o', 'j', 'a', 'k', 'n', 'j', 'i', 'z', 'n', 'i', 'c', 'a', '.', 'c', 'o', 'm', '\0', /* "mojapraca.sk", true */ 'm', 'o', 'j', 'a', 'p', 'r', 'a', 'c', 'a', '.', 's', 'k', '\0', /* "mojzis.com", true */ 'm', 'o', 'j', 'z', 'i', 's', '.', 'c', 'o', 'm', '\0', @@ -9321,6 +9333,7 @@ static const char kSTSHostTable[] = { /* "mpc-hc.org", true */ 'm', 'p', 'c', '-', 'h', 'c', '.', 'o', 'r', 'g', '\0', /* "mpcompliance.com", true */ 'm', 'p', 'c', 'o', 'm', 'p', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "mpetroff.net", true */ 'm', 'p', 'e', 't', 'r', 'o', 'f', 'f', '.', 'n', 'e', 't', '\0', + /* "mpintaamalabanna.it", true */ 'm', 'p', 'i', 'n', 't', 'a', 'a', 'm', 'a', 'l', 'a', 'b', 'a', 'n', 'n', 'a', '.', 'i', 't', '\0', /* "mplant.io", true */ 'm', 'p', 'l', 'a', 'n', 't', '.', 'i', 'o', '\0', /* "mplicka.cz", true */ 'm', 'p', 'l', 'i', 'c', 'k', 'a', '.', 'c', 'z', '\0', /* "mplusm.eu", true */ 'm', 'p', 'l', 'u', 's', 'm', '.', 'e', 'u', '\0', @@ -9454,6 +9467,7 @@ static const char kSTSHostTable[] = { /* "myepass.de", true */ 'm', 'y', 'e', 'p', 'a', 's', 's', '.', 'd', 'e', '\0', /* "myfedloan.org", true */ 'm', 'y', 'f', 'e', 'd', 'l', 'o', 'a', 'n', '.', 'o', 'r', 'g', '\0', /* "myfrenchtattoo.fr", true */ 'm', 'y', 'f', 'r', 'e', 'n', 'c', 'h', 't', 'a', 't', 't', 'o', 'o', '.', 'f', 'r', '\0', + /* "myg21.com", true */ 'm', 'y', 'g', '2', '1', '.', 'c', 'o', 'm', '\0', /* "mygadgetguardian.lookout.com", false */ 'm', 'y', 'g', 'a', 'd', 'g', 'e', 't', 'g', 'u', 'a', 'r', 'd', 'i', 'a', 'n', '.', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0', /* "mygalgame.com", true */ 'm', 'y', 'g', 'a', 'l', 'g', 'a', 'm', 'e', '.', 'c', 'o', 'm', '\0', /* "mygallery.homelinux.net", true */ 'm', 'y', 'g', 'a', 'l', 'l', 'e', 'r', 'y', '.', 'h', 'o', 'm', 'e', 'l', 'i', 'n', 'u', 'x', '.', 'n', 'e', 't', '\0', @@ -9511,6 +9525,7 @@ static const char kSTSHostTable[] = { /* "mytc.fr", true */ 'm', 'y', 't', 'c', '.', 'f', 'r', '\0', /* "mythengay.ch", true */ 'm', 'y', 't', 'h', 'e', 'n', 'g', 'a', 'y', '.', 'c', 'h', '\0', /* "mythlogic.com", true */ 'm', 'y', 't', 'h', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0', + /* "mythslegendscollection.com", true */ 'm', 'y', 't', 'h', 's', 'l', 'e', 'g', 'e', 'n', 'd', 's', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "mytraiteurs.com", true */ 'm', 'y', 't', 'r', 'a', 'i', 't', 'e', 'u', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "mytripcar.co.uk", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "mytripcar.de", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'd', 'e', '\0', @@ -9523,7 +9538,6 @@ static const char kSTSHostTable[] = { /* "myworkinfo.com", true */ 'm', 'y', 'w', 'o', 'r', 'k', 'i', 'n', 'f', 'o', '.', 'c', 'o', 'm', '\0', /* "myworth.com.au", true */ 'm', 'y', 'w', 'o', 'r', 't', 'h', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "myzina.cz", false */ 'm', 'y', 'z', 'i', 'n', 'a', '.', 'c', 'z', '\0', - /* "mziulu.me", false */ 'm', 'z', 'i', 'u', 'l', 'u', '.', 'm', 'e', '\0', /* "n-pix.com", false */ 'n', '-', 'p', 'i', 'x', '.', 'c', 'o', 'm', '\0', /* "n-soft.info", true */ 'n', '-', 's', 'o', 'f', 't', '.', 'i', 'n', 'f', 'o', '\0', /* "n-un.de", true */ 'n', '-', 'u', 'n', '.', 'd', 'e', '\0', @@ -9571,6 +9585,7 @@ static const char kSTSHostTable[] = { /* "naralogics.com", true */ 'n', 'a', 'r', 'a', 'l', 'o', 'g', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0', /* "narfation.org", true */ 'n', 'a', 'r', 'f', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0', /* "nargele.eu", true */ 'n', 'a', 'r', 'g', 'e', 'l', 'e', '.', 'e', 'u', '\0', + /* "nargileh.nl", true */ 'n', 'a', 'r', 'g', 'i', 'l', 'e', 'h', '.', 'n', 'l', '\0', /* "naro.se", true */ 'n', 'a', 'r', 'o', '.', 's', 'e', '\0', /* "narodniki.com", true */ 'n', 'a', 'r', 'o', 'd', 'n', 'i', 'k', 'i', '.', 'c', 'o', 'm', '\0', /* "narthollis.net", true */ 'n', 'a', 'r', 't', 'h', 'o', 'l', 'l', 'i', 's', '.', 'n', 'e', 't', '\0', @@ -9641,6 +9656,7 @@ static const char kSTSHostTable[] = { /* "nedlinin.com", true */ 'n', 'e', 'd', 'l', 'i', 'n', 'i', 'n', '.', 'c', 'o', 'm', '\0', /* "nedraconsult.ru", true */ 'n', 'e', 'd', 'r', 'a', 'c', 'o', 'n', 's', 'u', 'l', 't', '.', 'r', 'u', '\0', /* "nedzad.me", true */ 'n', 'e', 'd', 'z', 'a', 'd', '.', 'm', 'e', '\0', + /* "neel.ch", true */ 'n', 'e', 'e', 'l', '.', 'c', 'h', '\0', /* "neer.io", true */ 'n', 'e', 'e', 'r', '.', 'i', 'o', '\0', /* "nefertitis.cz", true */ 'n', 'e', 'f', 'e', 'r', 't', 'i', 't', 'i', 's', '.', 'c', 'z', '\0', /* "neftebitum-kngk.ru", true */ 'n', 'e', 'f', 't', 'e', 'b', 'i', 't', 'u', 'm', '-', 'k', 'n', 'g', 'k', '.', 'r', 'u', '\0', @@ -9848,6 +9864,7 @@ static const char kSTSHostTable[] = { /* "nikcub.com", true */ 'n', 'i', 'k', 'c', 'u', 'b', '.', 'c', 'o', 'm', '\0', /* "nikklassen.ca", true */ 'n', 'i', 'k', 'k', 'l', 'a', 's', 's', 'e', 'n', '.', 'c', 'a', '\0', /* "nikksno.io", true */ 'n', 'i', 'k', 'k', 's', 'n', 'o', '.', 'i', 'o', '\0', + /* "niklas.pw", true */ 'n', 'i', 'k', 'l', 'a', 's', '.', 'p', 'w', '\0', /* "niklaslindblad.se", true */ 'n', 'i', 'k', 'l', 'a', 's', 'l', 'i', 'n', 'd', 'b', 'l', 'a', 'd', '.', 's', 'e', '\0', /* "nikobradshaw.com", true */ 'n', 'i', 'k', 'o', 'b', 'r', 'a', 'd', 's', 'h', 'a', 'w', '.', 'c', 'o', 'm', '\0', /* "nikolasbradshaw.com", true */ 'n', 'i', 'k', 'o', 'l', 'a', 's', 'b', 'r', 'a', 'd', 's', 'h', 'a', 'w', '.', 'c', 'o', 'm', '\0', @@ -9980,7 +9997,6 @@ static const char kSTSHostTable[] = { /* "npw.net", true */ 'n', 'p', 'w', '.', 'n', 'e', 't', '\0', /* "nq7.pl", true */ 'n', 'q', '7', '.', 'p', 'l', '\0', /* "nrechn.de", true */ 'n', 'r', 'e', 'c', 'h', 'n', '.', 'd', 'e', '\0', - /* "nrizzio.me", true */ 'n', 'r', 'i', 'z', 'z', 'i', 'o', '.', 'm', 'e', '\0', /* "nrkn.fr", true */ 'n', 'r', 'k', 'n', '.', 'f', 'r', '\0', /* "nsa.lol", true */ 'n', 's', 'a', '.', 'l', 'o', 'l', '\0', /* "nsa.wtf", true */ 'n', 's', 'a', '.', 'w', 't', 'f', '\0', @@ -9996,7 +10012,6 @@ static const char kSTSHostTable[] = { /* "ntotten.com", true */ 'n', 't', 'o', 't', 't', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "ntppool.org", true */ 'n', 't', 'p', 'p', 'o', 'o', 'l', '.', 'o', 'r', 'g', '\0', /* "nube.ninja", true */ 'n', 'u', 'b', 'e', '.', 'n', 'i', 'n', 'j', 'a', '\0', - /* "nubella.com.au", true */ 'n', 'u', 'b', 'e', 'l', 'l', 'a', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "nubu.at", true */ 'n', 'u', 'b', 'u', '.', 'a', 't', '\0', /* "nukenet.se", true */ 'n', 'u', 'k', 'e', 'n', 'e', 't', '.', 's', 'e', '\0', /* "nukute.com", true */ 'n', 'u', 'k', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0', @@ -10933,7 +10948,6 @@ static const char kSTSHostTable[] = { /* "postbox.life", true */ 'p', 'o', 's', 't', 'b', 'o', 'x', '.', 'l', 'i', 'f', 'e', '\0', /* "postcodegarant.nl", true */ 'p', 'o', 's', 't', 'c', 'o', 'd', 'e', 'g', 'a', 'r', 'a', 'n', 't', '.', 'n', 'l', '\0', /* "posteo.de", false */ 'p', 'o', 's', 't', 'e', 'o', '.', 'd', 'e', '\0', - /* "posterspy.com", true */ 'p', 'o', 's', 't', 'e', 'r', 's', 'p', 'y', '.', 'c', 'o', 'm', '\0', /* "postfinance.ch", true */ 'p', 'o', 's', 't', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'h', '\0', /* "postmatescode.com", true */ 'p', 'o', 's', 't', 'm', 'a', 't', 'e', 's', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0', /* "postn.eu", true */ 'p', 'o', 's', 't', 'n', '.', 'e', 'u', '\0', @@ -11340,7 +11354,6 @@ static const char kSTSHostTable[] = { /* "raidstone.net", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'n', 'e', 't', '\0', /* "raidstone.rocks", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'r', 'o', 'c', 'k', 's', '\0', /* "railgun.ac", true */ 'r', 'a', 'i', 'l', 'g', 'u', 'n', '.', 'a', 'c', '\0', - /* "railjob.cn", true */ 'r', 'a', 'i', 'l', 'j', 'o', 'b', '.', 'c', 'n', '\0', /* "railyardurgentcare.com", true */ 'r', 'a', 'i', 'l', 'y', 'a', 'r', 'd', 'u', 'r', 'g', 'e', 'n', 't', 'c', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "rainbowbay.org", true */ 'r', 'a', 'i', 'n', 'b', 'o', 'w', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0', /* "rainforest.engineering", true */ 'r', 'a', 'i', 'n', 'f', 'o', 'r', 'e', 's', 't', '.', 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', 'i', 'n', 'g', '\0', @@ -11370,6 +11383,7 @@ static const char kSTSHostTable[] = { /* "rapidshit.net", true */ 'r', 'a', 'p', 'i', 'd', 's', 'h', 'i', 't', '.', 'n', 'e', 't', '\0', /* "rasagiline.com", true */ 'r', 'a', 's', 'a', 'g', 'i', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "rasebo.ro", true */ 'r', 'a', 's', 'e', 'b', 'o', '.', 'r', 'o', '\0', + /* "raspass.me", true */ 'r', 'a', 's', 'p', 'a', 's', 's', '.', 'm', 'e', '\0', /* "raspberry.us", true */ 'r', 'a', 's', 'p', 'b', 'e', 'r', 'r', 'y', '.', 'u', 's', '\0', /* "ratd.net", true */ 'r', 'a', 't', 'd', '.', 'n', 'e', 't', '\0', /* "rathorian.fr", true */ 'r', 'a', 't', 'h', 'o', 'r', 'i', 'a', 'n', '.', 'f', 'r', '\0', @@ -11588,6 +11602,7 @@ static const char kSTSHostTable[] = { /* "retrofitlab.com", true */ 'r', 'e', 't', 'r', 'o', 'f', 'i', 't', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0', /* "retube.ga", true */ 'r', 'e', 't', 'u', 'b', 'e', '.', 'g', 'a', '\0', /* "reucon.com", true */ 'r', 'e', 'u', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0', + /* "reulitz.de", true */ 'r', 'e', 'u', 'l', 'i', 't', 'z', '.', 'd', 'e', '\0', /* "reuter-shop.com", true */ 'r', 'e', 'u', 't', 'e', 'r', '-', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0', /* "reuter.de", true */ 'r', 'e', 'u', 't', 'e', 'r', '.', 'd', 'e', '\0', /* "revamed.com", false */ 'r', 'e', 'v', 'a', 'm', 'e', 'd', '.', 'c', 'o', 'm', '\0', @@ -11711,6 +11726,7 @@ static const char kSTSHostTable[] = { /* "robud.info", true */ 'r', 'o', 'b', 'u', 'd', '.', 'i', 'n', 'f', 'o', '\0', /* "robust.ga", true */ 'r', 'o', 'b', 'u', 's', 't', '.', 'g', 'a', '\0', /* "rockcanyonbank.com", true */ 'r', 'o', 'c', 'k', 'c', 'a', 'n', 'y', 'o', 'n', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0', + /* "rocketr.net", true */ 'r', 'o', 'c', 'k', 'e', 't', 'r', '.', 'n', 'e', 't', '\0', /* "rockeyscrivo.com", true */ 'r', 'o', 'c', 'k', 'e', 'y', 's', 'c', 'r', 'i', 'v', 'o', '.', 'c', 'o', 'm', '\0', /* "rocssti.net", true */ 'r', 'o', 'c', 's', 's', 't', 'i', '.', 'n', 'e', 't', '\0', /* "rodehutskors.net", true */ 'r', 'o', 'd', 'e', 'h', 'u', 't', 's', 'k', 'o', 'r', 's', '.', 'n', 'e', 't', '\0', @@ -11803,7 +11819,6 @@ static const char kSTSHostTable[] = { /* "rr105.de", true */ 'r', 'r', '1', '0', '5', '.', 'd', 'e', '\0', /* "rring.me", true */ 'r', 'r', 'i', 'n', 'g', '.', 'm', 'e', '\0', /* "rro.rs", true */ 'r', 'r', 'o', '.', 'r', 's', '\0', - /* "rrom.me", true */ 'r', 'r', 'o', 'm', '.', 'm', 'e', '\0', /* "rsampaio.info", true */ 'r', 's', 'a', 'm', 'p', 'a', 'i', 'o', '.', 'i', 'n', 'f', 'o', '\0', /* "rsblake.net", true */ 'r', 's', 'b', 'l', 'a', 'k', 'e', '.', 'n', 'e', 't', '\0', /* "rsi.im", false */ 'r', 's', 'i', '.', 'i', 'm', '\0', @@ -11881,6 +11896,7 @@ static const char kSTSHostTable[] = { /* "s-mainte.com", true */ 's', '-', 'm', 'a', 'i', 'n', 't', 'e', '.', 'c', 'o', 'm', '\0', /* "s-mdb.com", true */ 's', '-', 'm', 'd', 'b', '.', 'c', 'o', 'm', '\0', /* "s-rickroll-p.pw", true */ 's', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'p', '.', 'p', 'w', '\0', + /* "s007.co", true */ 's', '0', '0', '7', '.', 'c', 'o', '\0', /* "s13d.fr", true */ 's', '1', '3', 'd', '.', 'f', 'r', '\0', /* "s16e.no", true */ 's', '1', '6', 'e', '.', 'n', 'o', '\0', /* "sa.net", true */ 's', 'a', '.', 'n', 'e', 't', '\0', @@ -12047,7 +12063,6 @@ static const char kSTSHostTable[] = { /* "scandicom.fi", true */ 's', 'c', 'a', 'n', 'd', 'i', 'c', 'o', 'm', '.', 'f', 'i', '\0', /* "scandinavia.dating", true */ 's', 'c', 'a', 'n', 'd', 'i', 'n', 'a', 'v', 'i', 'a', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0', /* "scanleasing.net", true */ 's', 'c', 'a', 'n', 'l', 'e', 'a', 's', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0', - /* "scannabi.com", true */ 's', 'c', 'a', 'n', 'n', 'a', 'b', 'i', '.', 'c', 'o', 'm', '\0', /* "scanpay.dk", true */ 's', 'c', 'a', 'n', 'p', 'a', 'y', '.', 'd', 'k', '\0', /* "scenester.tv", true */ 's', 'c', 'e', 'n', 'e', 's', 't', 'e', 'r', '.', 't', 'v', '\0', /* "schachburg.de", true */ 's', 'c', 'h', 'a', 'c', 'h', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0', @@ -12303,7 +12318,6 @@ static const char kSTSHostTable[] = { /* "sequencing.com", true */ 's', 'e', 'q', 'u', 'e', 'n', 'c', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "sequiturs.com", true */ 's', 'e', 'q', 'u', 'i', 't', 'u', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "serafin.tech", true */ 's', 'e', 'r', 'a', 'f', 'i', 'n', '.', 't', 'e', 'c', 'h', '\0', - /* "serathius.ovh", true */ 's', 'e', 'r', 'a', 't', 'h', 'i', 'u', 's', '.', 'o', 'v', 'h', '\0', /* "serbanpaun.ro", true */ 's', 'e', 'r', 'b', 'a', 'n', 'p', 'a', 'u', 'n', '.', 'r', 'o', '\0', /* "serf.io", true */ 's', 'e', 'r', 'f', '.', 'i', 'o', '\0', /* "servdiscount.com", true */ 's', 'e', 'r', 'v', 'd', 'i', 's', 'c', 'o', 'u', 'n', 't', '.', 'c', 'o', 'm', '\0', @@ -12351,7 +12365,6 @@ static const char kSTSHostTable[] = { /* "sgroup-rec.com", true */ 's', 'g', 'r', 'o', 'u', 'p', '-', 'r', 'e', 'c', '.', 'c', 'o', 'm', '\0', /* "sgtcodfish.com", true */ 's', 'g', 't', 'c', 'o', 'd', 'f', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0', /* "sh-heppelmann.de", true */ 's', 'h', '-', 'h', 'e', 'p', 'p', 'e', 'l', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0', - /* "sh-network.de", false */ 's', 'h', '-', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'd', 'e', '\0', /* "shaaaaaaaaaaaaa.com", true */ 's', 'h', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', '.', 'c', 'o', 'm', '\0', /* "shadex.net", true */ 's', 'h', 'a', 'd', 'e', 'x', '.', 'n', 'e', 't', '\0', /* "shadowguardian507-irl.tk", true */ 's', 'h', 'a', 'd', 'o', 'w', 'g', 'u', 'a', 'r', 'd', 'i', 'a', 'n', '5', '0', '7', '-', 'i', 'r', 'l', '.', 't', 'k', '\0', @@ -12372,6 +12385,7 @@ static const char kSTSHostTable[] = { /* "shan.io", false */ 's', 'h', 'a', 'n', '.', 'i', 'o', '\0', /* "shanae.nl", true */ 's', 'h', 'a', 'n', 'a', 'e', '.', 'n', 'l', '\0', /* "shanetully.com", true */ 's', 'h', 'a', 'n', 'e', 't', 'u', 'l', 'l', 'y', '.', 'c', 'o', 'm', '\0', + /* "shanewadleigh.com", true */ 's', 'h', 'a', 'n', 'e', 'w', 'a', 'd', 'l', 'e', 'i', 'g', 'h', '.', 'c', 'o', 'm', '\0', /* "shang-yu.cn", true */ 's', 'h', 'a', 'n', 'g', '-', 'y', 'u', '.', 'c', 'n', '\0', /* "shannoneichorn.com", true */ 's', 'h', 'a', 'n', 'n', 'o', 'n', 'e', 'i', 'c', 'h', 'o', 'r', 'n', '.', 'c', 'o', 'm', '\0', /* "shansing.cn", true */ 's', 'h', 'a', 'n', 's', 'i', 'n', 'g', '.', 'c', 'n', '\0', @@ -12583,6 +12597,7 @@ static const char kSTSHostTable[] = { /* "sitehost.io", true */ 's', 'i', 't', 'e', 'h', 'o', 's', 't', '.', 'i', 'o', '\0', /* "sites.google.com", true */ 's', 'i', 't', 'e', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "sitesko.de", true */ 's', 'i', 't', 'e', 's', 'k', 'o', '.', 'd', 'e', '\0', + /* "sitsy.ru", false */ 's', 'i', 't', 's', 'y', '.', 'r', 'u', '\0', /* "sizingservers.be", false */ 's', 'i', 'z', 'i', 'n', 'g', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'b', 'e', '\0', /* "sizzle.co.uk", true */ 's', 'i', 'z', 'z', 'l', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "sjoorm.com", true */ 's', 'j', 'o', 'o', 'r', 'm', '.', 'c', 'o', 'm', '\0', @@ -12670,7 +12685,6 @@ static const char kSTSHostTable[] = { /* "slovoice.org", true */ 's', 'l', 'o', 'v', 'o', 'i', 'c', 'e', '.', 'o', 'r', 'g', '\0', /* "slow.zone", true */ 's', 'l', 'o', 'w', '.', 'z', 'o', 'n', 'e', '\0', /* "slowb.ro", true */ 's', 'l', 'o', 'w', 'b', '.', 'r', 'o', '\0', - /* "slowfood.es", true */ 's', 'l', 'o', 'w', 'f', 'o', 'o', 'd', '.', 'e', 's', '\0', /* "slse.ca", true */ 's', 'l', 's', 'e', '.', 'c', 'a', '\0', /* "slxh.eu", true */ 's', 'l', 'x', 'h', '.', 'e', 'u', '\0', /* "slxh.nl", true */ 's', 'l', 'x', 'h', '.', 'n', 'l', '\0', @@ -12743,6 +12757,7 @@ static const char kSTSHostTable[] = { /* "snazzie.nl", true */ 's', 'n', 'a', 'z', 'z', 'i', 'e', '.', 'n', 'l', '\0', /* "sneakpod.de", true */ 's', 'n', 'e', 'a', 'k', 'p', 'o', 'd', '.', 'd', 'e', '\0', /* "sneakynote.com", true */ 's', 'n', 'e', 'a', 'k', 'y', 'n', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0', + /* "sneberger.cz", false */ 's', 'n', 'e', 'b', 'e', 'r', 'g', 'e', 'r', '.', 'c', 'z', '\0', /* "sneed.it", true */ 's', 'n', 'e', 'e', 'd', '.', 'i', 't', '\0', /* "sneedit.com", true */ 's', 'n', 'e', 'e', 'd', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "sneedit.de", true */ 's', 'n', 'e', 'e', 'd', 'i', 't', '.', 'd', 'e', '\0', @@ -12897,7 +12912,6 @@ static const char kSTSHostTable[] = { /* "southside-tuning-day.de", true */ 's', 'o', 'u', 't', 'h', 's', 'i', 'd', 'e', '-', 't', 'u', 'n', 'i', 'n', 'g', '-', 'd', 'a', 'y', '.', 'd', 'e', '\0', /* "souvik.me", true */ 's', 'o', 'u', 'v', 'i', 'k', '.', 'm', 'e', '\0', /* "soved.eu", true */ 's', 'o', 'v', 'e', 'd', '.', 'e', 'u', '\0', - /* "sowncloud.de", true */ 's', 'o', 'w', 'n', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0', /* "sozon.ca", true */ 's', 'o', 'z', 'o', 'n', '.', 'c', 'a', '\0', /* "sp.rw", true */ 's', 'p', '.', 'r', 'w', '\0', /* "space-it.de", true */ 's', 'p', 'a', 'c', 'e', '-', 'i', 't', '.', 'd', 'e', '\0', @@ -13043,6 +13057,7 @@ static const char kSTSHostTable[] = { /* "sstewartgallus.com", true */ 's', 's', 't', 'e', 'w', 'a', 'r', 't', 'g', 'a', 'l', 'l', 'u', 's', '.', 'c', 'o', 'm', '\0', /* "ssworld.ga", true */ 's', 's', 'w', 'o', 'r', 'l', 'd', '.', 'g', 'a', '\0', /* "st-kilian-markt-erlbach.de", true */ 's', 't', '-', 'k', 'i', 'l', 'i', 'a', 'n', '-', 'm', 'a', 'r', 'k', 't', '-', 'e', 'r', 'l', 'b', 'a', 'c', 'h', '.', 'd', 'e', '\0', + /* "st-news.de", true */ 's', 't', '-', 'n', 'e', 'w', 's', '.', 'd', 'e', '\0', /* "staack.com", false */ 's', 't', 'a', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0', /* "staatschutz.at", true */ 's', 't', 'a', 'a', 't', 's', 'c', 'h', 'u', 't', 'z', '.', 'a', 't', '\0', /* "staatsschutz.at", true */ 's', 't', 'a', 'a', 't', 's', 's', 'c', 'h', 'u', 't', 'z', '.', 'a', 't', '\0', @@ -13190,8 +13205,6 @@ static const char kSTSHostTable[] = { /* "storysift.news", true */ 's', 't', 'o', 'r', 'y', 's', 'i', 'f', 't', '.', 'n', 'e', 'w', 's', '\0', /* "stp-ip.com", true */ 's', 't', 'p', '-', 'i', 'p', '.', 'c', 'o', 'm', '\0', /* "stp-ip.net", true */ 's', 't', 'p', '-', 'i', 'p', '.', 'n', 'e', 't', '\0', - /* "stpip.com", true */ 's', 't', 'p', 'i', 'p', '.', 'c', 'o', 'm', '\0', - /* "stpip.net", true */ 's', 't', 'p', 'i', 'p', '.', 'n', 'e', 't', '\0', /* "strahlende-augen.info", true */ 's', 't', 'r', 'a', 'h', 'l', 'e', 'n', 'd', 'e', '-', 'a', 'u', 'g', 'e', 'n', '.', 'i', 'n', 'f', 'o', '\0', /* "strangemusicinc.net", true */ 's', 't', 'r', 'a', 'n', 'g', 'e', 'm', 'u', 's', 'i', 'c', 'i', 'n', 'c', '.', 'n', 'e', 't', '\0', /* "strangeplace.net", true */ 's', 't', 'r', 'a', 'n', 'g', 'e', 'p', 'l', 'a', 'c', 'e', '.', 'n', 'e', 't', '\0', @@ -13600,6 +13613,7 @@ static const char kSTSHostTable[] = { /* "teleogistic.net", true */ 't', 'e', 'l', 'e', 'o', 'g', 'i', 's', 't', 'i', 'c', '.', 'n', 'e', 't', '\0', /* "telepass.me", true */ 't', 'e', 'l', 'e', 'p', 'a', 's', 's', '.', 'm', 'e', '\0', /* "telescam.com", true */ 't', 'e', 'l', 'e', 's', 'c', 'a', 'm', '.', 'c', 'o', 'm', '\0', + /* "telling.xyz", true */ 't', 'e', 'l', 'l', 'i', 'n', 'g', '.', 'x', 'y', 'z', '\0', /* "tellingua.com", true */ 't', 'e', 'l', 'l', 'i', 'n', 'g', 'u', 'a', '.', 'c', 'o', 'm', '\0', /* "teloo.pl", true */ 't', 'e', 'l', 'o', 'o', '.', 'p', 'l', '\0', /* "temizmama.com", true */ 't', 'e', 'm', 'i', 'z', 'm', 'a', 'm', 'a', '.', 'c', 'o', 'm', '\0', @@ -13787,7 +13801,6 @@ static const char kSTSHostTable[] = { /* "thesled.net", true */ 't', 'h', 'e', 's', 'l', 'e', 'd', '.', 'n', 'e', 't', '\0', /* "thesplit.is", true */ 't', 'h', 'e', 's', 'p', 'l', 'i', 't', '.', 'i', 's', '\0', /* "thestory.ie", true */ 't', 'h', 'e', 's', 't', 'o', 'r', 'y', '.', 'i', 'e', '\0', - /* "thetechnical.me", true */ 't', 'h', 'e', 't', 'e', 'c', 'h', 'n', 'i', 'c', 'a', 'l', '.', 'm', 'e', '\0', /* "thetradinghall.com", true */ 't', 'h', 'e', 't', 'r', 'a', 'd', 'i', 'n', 'g', 'h', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0', /* "thetrendspotter.net", true */ 't', 'h', 'e', 't', 'r', 'e', 'n', 'd', 's', 'p', 'o', 't', 't', 'e', 'r', '.', 'n', 'e', 't', '\0', /* "thetruthhurvitz.com", true */ 't', 'h', 'e', 't', 'r', 'u', 't', 'h', 'h', 'u', 'r', 'v', 'i', 't', 'z', '.', 'c', 'o', 'm', '\0', @@ -13803,7 +13816,6 @@ static const char kSTSHostTable[] = { /* "theworkingeye.nl", true */ 't', 'h', 'e', 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'e', 'y', 'e', '.', 'n', 'l', '\0', /* "theworldsend.eu", true */ 't', 'h', 'e', 'w', 'o', 'r', 'l', 'd', 's', 'e', 'n', 'd', '.', 'e', 'u', '\0', /* "thexme.de", true */ 't', 'h', 'e', 'x', 'm', 'e', '.', 'd', 'e', '\0', - /* "theyosh.nl", true */ 't', 'h', 'e', 'y', 'o', 's', 'h', '.', 'n', 'l', '\0', /* "thezero.org", true */ 't', 'h', 'e', 'z', 'e', 'r', 'o', '.', 'o', 'r', 'g', '\0', /* "thibautcharles.net", true */ 't', 'h', 'i', 'b', 'a', 'u', 't', 'c', 'h', 'a', 'r', 'l', 'e', 's', '.', 'n', 'e', 't', '\0', /* "thierryhayoz.ch", true */ 't', 'h', 'i', 'e', 'r', 'r', 'y', 'h', 'a', 'y', 'o', 'z', '.', 'c', 'h', '\0', @@ -13878,6 +13890,7 @@ static const char kSTSHostTable[] = { /* "tigerchef.com", true */ 't', 'i', 'g', 'e', 'r', 'c', 'h', 'e', 'f', '.', 'c', 'o', 'm', '\0', /* "tigerdile.com", true */ 't', 'i', 'g', 'e', 'r', 'd', 'i', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "tilikum.io", true */ 't', 'i', 'l', 'i', 'k', 'u', 'm', '.', 'i', 'o', '\0', + /* "tillseasyscore.com", true */ 't', 'i', 'l', 'l', 's', 'e', 'a', 's', 'y', 's', 'c', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "timdebruijn.nl", true */ 't', 'i', 'm', 'd', 'e', 'b', 'r', 'u', 'i', 'j', 'n', '.', 'n', 'l', '\0', /* "timdoug.com", true */ 't', 'i', 'm', 'd', 'o', 'u', 'g', '.', 'c', 'o', 'm', '\0', /* "time2060.ru", true */ 't', 'i', 'm', 'e', '2', '0', '6', '0', '.', 'r', 'u', '\0', @@ -14001,7 +14014,6 @@ static const char kSTSHostTable[] = { /* "tomend.es", true */ 't', 'o', 'm', 'e', 'n', 'd', '.', 'e', 's', '\0', /* "tomfisher.eu", true */ 't', 'o', 'm', 'f', 'i', 's', 'h', 'e', 'r', '.', 'e', 'u', '\0', /* "tomjonsson.se", true */ 't', 'o', 'm', 'j', 'o', 'n', 's', 's', 'o', 'n', '.', 's', 'e', '\0', - /* "tomli.blog", true */ 't', 'o', 'm', 'l', 'i', '.', 'b', 'l', 'o', 'g', '\0', /* "tomli.me", true */ 't', 'o', 'm', 'l', 'i', '.', 'm', 'e', '\0', /* "tomm.yt", true */ 't', 'o', 'm', 'm', '.', 'y', 't', '\0', /* "tomnatt.com", true */ 't', 'o', 'm', 'n', 'a', 't', 't', '.', 'c', 'o', 'm', '\0', @@ -14043,7 +14055,6 @@ static const char kSTSHostTable[] = { /* "toolbox.ninja", false */ 't', 'o', 'o', 'l', 'b', 'o', 'x', '.', 'n', 'i', 'n', 'j', 'a', '\0', /* "toonpool.com", true */ 't', 'o', 'o', 'n', 'p', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0', /* "toool.nl", true */ 't', 'o', 'o', 'o', 'l', '.', 'n', 'l', '\0', - /* "toool.org", true */ 't', 'o', 'o', 'o', 'l', '.', 'o', 'r', 'g', '\0', /* "tooolroc.org", true */ 't', 'o', 'o', 'o', 'l', 'r', 'o', 'c', '.', 'o', 'r', 'g', '\0', /* "tooti.biz", true */ 't', 'o', 'o', 't', 'i', '.', 'b', 'i', 'z', '\0', /* "topaxi.ch", true */ 't', 'o', 'p', 'a', 'x', 'i', '.', 'c', 'h', '\0', @@ -14220,7 +14231,6 @@ static const char kSTSHostTable[] = { /* "triple-mmm.de", true */ 't', 'r', 'i', 'p', 'l', 'e', '-', 'm', 'm', 'm', '.', 'd', 'e', '\0', /* "tripseats.com", true */ 't', 'r', 'i', 'p', 's', 'e', 'a', 't', 's', '.', 'c', 'o', 'm', '\0', /* "trixexpressweb.nl", true */ 't', 'r', 'i', 'x', 'e', 'x', 'p', 'r', 'e', 's', 's', 'w', 'e', 'b', '.', 'n', 'l', '\0', - /* "trkpuls.tk", true */ 't', 'r', 'k', 'p', 'u', 'l', 's', '.', 't', 'k', '\0', /* "troi.de", true */ 't', 'r', 'o', 'i', '.', 'd', 'e', '\0', /* "troianet.com.br", true */ 't', 'r', 'o', 'i', 'a', 'n', 'e', 't', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "trollscave.xyz", true */ 't', 'r', 'o', 'l', 'l', 's', 'c', 'a', 'v', 'e', '.', 'x', 'y', 'z', '\0', @@ -14645,6 +14655,7 @@ static const char kSTSHostTable[] = { /* "vavai.net", true */ 'v', 'a', 'v', 'a', 'i', '.', 'n', 'e', 't', '\0', /* "vavel.com", true */ 'v', 'a', 'v', 'e', 'l', '.', 'c', 'o', 'm', '\0', /* "vazue.com", true */ 'v', 'a', 'z', 'u', 'e', '.', 'c', 'o', 'm', '\0', + /* "vbazile.com", true */ 'v', 'b', 'a', 'z', 'i', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "vbest.net", true */ 'v', 'b', 'e', 's', 't', '.', 'n', 'e', 't', '\0', /* "vbh2o.com", true */ 'v', 'b', 'h', '2', 'o', '.', 'c', 'o', 'm', '\0', /* "vbhelp.org", true */ 'v', 'b', 'h', 'e', 'l', 'p', '.', 'o', 'r', 'g', '\0', @@ -14823,6 +14834,7 @@ static const char kSTSHostTable[] = { /* "vleij.se", true */ 'v', 'l', 'e', 'i', 'j', '.', 's', 'e', '\0', /* "vloeck.de", true */ 'v', 'l', 'o', 'e', 'c', 'k', '.', 'd', 'e', '\0', /* "vlogge.com", true */ 'v', 'l', 'o', 'g', 'g', 'e', '.', 'c', 'o', 'm', '\0', + /* "vmc.co.id", true */ 'v', 'm', 'c', '.', 'c', 'o', '.', 'i', 'd', '\0', /* "vmem.jp", true */ 'v', 'm', 'e', 'm', '.', 'j', 'p', '\0', /* "vmis.nl", true */ 'v', 'm', 'i', 's', '.', 'n', 'l', '\0', /* "vmoagents.com", false */ 'v', 'm', 'o', 'a', 'g', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '\0', @@ -15477,12 +15489,10 @@ static const char kSTSHostTable[] = { /* "wypemagazine.se", true */ 'w', 'y', 'p', 'e', 'm', 'a', 'g', 'a', 'z', 'i', 'n', 'e', '.', 's', 'e', '\0', /* "wzrd.in", true */ 'w', 'z', 'r', 'd', '.', 'i', 'n', '\0', /* "wzyboy.org", true */ 'w', 'z', 'y', 'b', 'o', 'y', '.', 'o', 'r', 'g', '\0', - /* "x-case.de", true */ 'x', '-', 'c', 'a', 's', 'e', '.', 'd', 'e', '\0', /* "x-iweb.ru", true */ 'x', '-', 'i', 'w', 'e', 'b', '.', 'r', 'u', '\0', /* "x-ripped-hd.com", true */ 'x', '-', 'r', 'i', 'p', 'p', 'e', 'd', '-', 'h', 'd', '.', 'c', 'o', 'm', '\0', /* "x.io", true */ 'x', '.', 'i', 'o', '\0', /* "x.st", true */ 'x', '.', 's', 't', '\0', - /* "x3led.com", true */ 'x', '3', 'l', 'e', 'd', '.', 'c', 'o', 'm', '\0', /* "x509.io", true */ 'x', '5', '0', '9', '.', 'i', 'o', '\0', /* "x509.pub", true */ 'x', '5', '0', '9', '.', 'p', 'u', 'b', '\0', /* "x509.pw", true */ 'x', '5', '0', '9', '.', 'p', 'w', '\0', @@ -15823,7 +15833,6 @@ static const char kSTSHostTable[] = { /* "zeronet.io", true */ 'z', 'e', 'r', 'o', 'n', 'e', 't', '.', 'i', 'o', '\0', /* "zeropush.com", true */ 'z', 'e', 'r', 'o', 'p', 'u', 's', 'h', '.', 'c', 'o', 'm', '\0', /* "zerossl.com", true */ 'z', 'e', 'r', 'o', 's', 's', 'l', '.', 'c', 'o', 'm', '\0', - /* "zertif.info", true */ 'z', 'e', 'r', 't', 'i', 'f', '.', 'i', 'n', 'f', 'o', '\0', /* "zespia.tw", false */ 'z', 'e', 's', 'p', 'i', 'a', '.', 't', 'w', '\0', /* "zeto365.pl", true */ 'z', 'e', 't', 'o', '3', '6', '5', '.', 'p', 'l', '\0', /* "zetorzeszow.pl", true */ 'z', 'e', 't', 'o', 'r', 'z', 'e', 's', 'z', 'o', 'w', '.', 'p', 'l', '\0', @@ -15970,1797 +15979,1796 @@ static const nsSTSPreload kSTSPreloadList[] = { { 259, true }, { 269, true }, { 279, true }, - { 290, true }, - { 298, true }, - { 311, true }, - { 319, true }, - { 327, true }, - { 334, true }, - { 344, true }, - { 358, true }, - { 373, true }, - { 383, false }, - { 406, true }, - { 426, true }, - { 438, true }, - { 454, true }, - { 462, true }, - { 470, true }, + { 287, true }, + { 300, true }, + { 308, true }, + { 316, true }, + { 323, true }, + { 333, true }, + { 347, true }, + { 362, true }, + { 372, false }, + { 395, true }, + { 415, true }, + { 427, true }, + { 443, true }, + { 451, true }, + { 459, true }, + { 469, true }, { 480, true }, - { 491, true }, - { 498, true }, - { 513, true }, - { 527, true }, + { 487, true }, + { 502, true }, + { 516, true }, + { 528, true }, { 539, true }, { 550, true }, { 561, true }, - { 572, true }, - { 582, true }, - { 592, true }, - { 617, true }, - { 625, true }, - { 635, true }, - { 643, true }, - { 661, true }, - { 672, false }, + { 571, true }, + { 581, true }, + { 606, true }, + { 614, true }, + { 624, true }, + { 632, true }, + { 650, true }, + { 661, false }, + { 677, true }, { 688, true }, - { 699, true }, - { 720, true }, - { 736, true }, - { 744, false }, - { 756, true }, - { 781, true }, - { 803, true }, - { 820, true }, - { 843, true }, + { 709, true }, + { 725, true }, + { 733, false }, + { 745, true }, + { 770, true }, + { 792, true }, + { 809, true }, + { 832, true }, + { 842, true }, { 853, true }, { 864, true }, - { 875, true }, - { 889, true }, - { 911, true }, - { 923, true }, - { 930, true }, + { 878, true }, + { 900, true }, + { 912, true }, + { 919, true }, + { 928, true }, { 939, true }, - { 950, true }, + { 946, true }, { 957, true }, { 968, true }, - { 979, true }, - { 986, true }, + { 975, true }, + { 982, true }, { 993, true }, - { 1004, true }, - { 1011, true }, - { 1023, true }, - { 1040, true }, - { 1058, true }, - { 1072, true }, + { 1000, true }, + { 1012, true }, + { 1029, true }, + { 1047, true }, + { 1061, true }, + { 1073, true }, { 1084, true }, - { 1095, true }, - { 1104, true }, - { 1110, true }, - { 1125, true }, - { 1133, true }, - { 1142, true }, + { 1093, true }, + { 1099, true }, + { 1114, true }, + { 1122, true }, + { 1131, true }, + { 1139, true }, { 1150, true }, - { 1161, true }, - { 1171, true }, - { 1189, true }, - { 1205, true }, - { 1214, true }, - { 1222, true }, + { 1160, true }, + { 1178, true }, + { 1194, true }, + { 1203, true }, + { 1211, true }, + { 1219, true }, { 1230, true }, - { 1241, true }, + { 1248, true }, { 1259, true }, - { 1270, true }, - { 1279, true }, - { 1291, true }, - { 1305, true }, - { 1313, true }, - { 1323, false }, - { 1336, true }, - { 1345, true }, - { 1359, true }, - { 1368, true }, - { 1389, true }, - { 1409, true }, - { 1418, true }, - { 1428, true }, - { 1443, true }, - { 1451, true }, - { 1468, true }, - { 1481, true }, - { 1490, false }, - { 1502, true }, + { 1268, true }, + { 1280, true }, + { 1294, true }, + { 1302, true }, + { 1312, false }, + { 1325, true }, + { 1334, true }, + { 1348, true }, + { 1357, true }, + { 1378, true }, + { 1398, true }, + { 1407, true }, + { 1417, true }, + { 1432, true }, + { 1440, true }, + { 1457, true }, + { 1470, true }, + { 1479, false }, + { 1491, true }, + { 1499, true }, { 1510, true }, - { 1521, true }, - { 1528, true }, - { 1537, true }, - { 1546, true }, - { 1559, true }, - { 1568, true }, - { 1587, true }, - { 1606, true }, - { 1618, true }, - { 1632, true }, + { 1517, true }, + { 1526, true }, + { 1535, true }, + { 1548, true }, + { 1557, true }, + { 1576, true }, + { 1595, true }, + { 1607, true }, + { 1621, true }, + { 1633, true }, { 1644, true }, - { 1655, true }, + { 1653, true }, { 1664, true }, - { 1675, true }, - { 1688, true }, - { 1696, true }, - { 1711, true }, - { 1723, true }, - { 1736, true }, - { 1746, true }, - { 1760, true }, - { 1774, true }, - { 1788, true }, - { 1796, true }, - { 1803, true }, - { 1814, true }, - { 1827, true }, - { 1839, true }, - { 1850, true }, - { 1860, true }, - { 1871, true }, - { 1882, true }, - { 1895, true }, - { 1903, false }, - { 1912, false }, + { 1677, true }, + { 1685, true }, + { 1700, true }, + { 1712, true }, + { 1725, true }, + { 1735, true }, + { 1749, true }, + { 1763, true }, + { 1777, true }, + { 1785, true }, + { 1792, true }, + { 1804, true }, + { 1815, true }, + { 1828, true }, + { 1840, true }, + { 1851, true }, + { 1861, true }, + { 1872, true }, + { 1883, true }, + { 1896, true }, + { 1904, false }, + { 1917, true }, { 1925, true }, - { 1933, true }, - { 1945, true }, - { 1957, true }, - { 1972, true }, - { 1991, true }, - { 1998, false }, - { 2017, true }, - { 2027, true }, - { 2033, true }, - { 2042, true }, - { 2055, true }, - { 2067, true }, - { 2076, true }, - { 2089, true }, - { 2099, true }, - { 2109, false }, - { 2116, true }, - { 2127, true }, + { 1937, true }, + { 1949, true }, + { 1964, true }, + { 1983, true }, + { 1990, false }, + { 2009, true }, + { 2019, true }, + { 2025, true }, + { 2034, true }, + { 2047, true }, + { 2059, true }, + { 2068, true }, + { 2081, true }, + { 2091, true }, + { 2101, false }, + { 2108, true }, + { 2119, true }, + { 2131, true }, { 2139, true }, - { 2147, true }, - { 2160, true }, - { 2167, true }, - { 2176, true }, - { 2188, true }, - { 2197, true }, - { 2218, true }, - { 2242, true }, - { 2257, true }, - { 2268, true }, - { 2274, true }, - { 2287, true }, - { 2299, true }, + { 2152, true }, + { 2159, true }, + { 2168, true }, + { 2180, true }, + { 2189, true }, + { 2210, true }, + { 2234, true }, + { 2249, true }, + { 2260, true }, + { 2266, true }, + { 2279, true }, + { 2291, true }, + { 2303, true }, { 2311, true }, - { 2319, true }, - { 2329, true }, - { 2346, true }, - { 2353, true }, - { 2362, true }, - { 2383, true }, - { 2396, false }, - { 2409, true }, - { 2419, true }, - { 2472, true }, - { 2484, true }, - { 2493, true }, - { 2502, true }, - { 2512, true }, - { 2522, true }, + { 2321, true }, + { 2338, true }, + { 2345, true }, + { 2354, true }, + { 2375, true }, + { 2388, false }, + { 2401, true }, + { 2411, true }, + { 2464, true }, + { 2476, true }, + { 2485, true }, + { 2494, true }, + { 2504, true }, + { 2514, true }, + { 2525, true }, { 2533, true }, - { 2541, true }, - { 2548, true }, - { 2560, true }, - { 2576, true }, - { 2588, true }, - { 2598, true }, - { 2609, true }, - { 2628, true }, - { 2639, true }, - { 2649, true }, - { 2660, true }, - { 2669, true }, - { 2682, true }, - { 2697, true }, + { 2540, true }, + { 2552, true }, + { 2568, true }, + { 2580, true }, + { 2590, true }, + { 2601, true }, + { 2620, true }, + { 2631, true }, + { 2641, true }, + { 2652, true }, + { 2661, true }, + { 2674, true }, + { 2689, true }, + { 2704, true }, { 2712, true }, - { 2720, true }, - { 2730, true }, - { 2747, true }, - { 2762, true }, - { 2774, true }, - { 2790, true }, - { 2800, true }, - { 2807, true }, - { 2818, true }, - { 2833, true }, - { 2843, true }, - { 2871, true }, - { 2890, true }, - { 2900, true }, - { 2911, true }, - { 2929, true }, - { 2940, true }, - { 2954, true }, - { 2966, true }, - { 2988, true }, - { 3004, true }, - { 3015, false }, - { 3031, false }, - { 3043, true }, - { 3056, true }, - { 3073, true }, - { 3098, true }, - { 3115, false }, - { 3123, true }, - { 3132, true }, - { 3156, true }, - { 3169, true }, - { 3181, true }, - { 3192, true }, - { 3210, true }, - { 3234, true }, - { 3241, true }, - { 3254, true }, - { 3267, true }, - { 3276, true }, - { 3293, true }, - { 3305, true }, - { 3324, true }, - { 3347, true }, - { 3361, true }, - { 3385, true }, - { 3401, true }, - { 3414, true }, - { 3431, true }, - { 3451, true }, - { 3464, true }, - { 3482, true }, - { 3497, true }, - { 3518, true }, - { 3538, true }, - { 3563, true }, - { 3575, true }, - { 3586, true }, - { 3605, true }, - { 3626, true }, - { 3638, true }, - { 3655, true }, - { 3668, true }, - { 3684, true }, - { 3705, true }, - { 3717, true }, - { 3730, false }, - { 3739, false }, - { 3749, true }, - { 3764, true }, - { 3781, true }, - { 3795, true }, - { 3808, true }, - { 3824, true }, - { 3835, true }, - { 3847, true }, - { 3868, false }, - { 3878, true }, - { 3893, true }, - { 3907, false }, - { 3920, true }, - { 3929, true }, - { 3944, true }, - { 3958, true }, - { 3970, true }, - { 3985, true }, - { 3998, true }, - { 4010, true }, - { 4022, true }, - { 4034, true }, - { 4046, true }, + { 2722, true }, + { 2739, true }, + { 2754, true }, + { 2766, true }, + { 2782, true }, + { 2792, true }, + { 2799, true }, + { 2810, true }, + { 2825, true }, + { 2835, true }, + { 2863, true }, + { 2882, true }, + { 2892, true }, + { 2903, true }, + { 2921, true }, + { 2932, true }, + { 2946, true }, + { 2958, true }, + { 2980, true }, + { 2996, true }, + { 3007, false }, + { 3023, false }, + { 3035, true }, + { 3048, true }, + { 3065, true }, + { 3090, true }, + { 3107, false }, + { 3115, true }, + { 3124, true }, + { 3148, true }, + { 3161, true }, + { 3173, true }, + { 3184, true }, + { 3202, true }, + { 3226, true }, + { 3233, true }, + { 3246, true }, + { 3259, true }, + { 3268, true }, + { 3285, true }, + { 3297, true }, + { 3316, true }, + { 3339, true }, + { 3353, true }, + { 3377, true }, + { 3393, true }, + { 3406, true }, + { 3423, true }, + { 3443, true }, + { 3456, true }, + { 3474, true }, + { 3489, true }, + { 3510, true }, + { 3530, true }, + { 3555, true }, + { 3567, true }, + { 3578, true }, + { 3597, true }, + { 3618, true }, + { 3630, true }, + { 3647, true }, + { 3660, true }, + { 3676, true }, + { 3697, true }, + { 3709, true }, + { 3722, false }, + { 3731, false }, + { 3741, true }, + { 3756, true }, + { 3773, true }, + { 3787, true }, + { 3800, true }, + { 3816, true }, + { 3827, true }, + { 3839, true }, + { 3860, false }, + { 3870, true }, + { 3885, true }, + { 3899, false }, + { 3912, true }, + { 3921, true }, + { 3936, true }, + { 3950, true }, + { 3962, true }, + { 3977, true }, + { 3990, true }, + { 4002, true }, + { 4014, true }, + { 4026, true }, + { 4038, true }, + { 4050, true }, { 4058, true }, - { 4066, true }, - { 4079, true }, - { 4090, true }, - { 4107, true }, - { 4121, true }, - { 4137, true }, - { 4150, true }, - { 4167, true }, - { 4183, true }, - { 4198, true }, - { 4213, true }, - { 4231, true }, - { 4240, true }, - { 4253, true }, - { 4274, true }, - { 4283, true }, - { 4293, true }, - { 4318, true }, - { 4329, true }, - { 4341, true }, - { 4360, true }, - { 4372, true }, - { 4391, true }, - { 4410, true }, - { 4429, true }, - { 4440, true }, - { 4452, true }, - { 4467, true }, - { 4478, true }, - { 4491, true }, - { 4503, true }, - { 4516, true }, - { 4530, true }, - { 4552, true }, - { 4562, true }, - { 4584, true }, - { 4593, true }, - { 4606, true }, - { 4620, true }, - { 4632, true }, - { 4645, true }, - { 4672, true }, - { 4698, true }, - { 4709, true }, - { 4722, true }, - { 4733, true }, - { 4757, true }, - { 4774, true }, - { 4802, true }, - { 4811, true }, - { 4821, true }, - { 4835, true }, - { 4854, true }, - { 4864, true }, - { 4878, true }, - { 4886, false }, - { 4907, true }, - { 4925, true }, - { 4936, true }, - { 4946, true }, - { 4955, true }, - { 4974, true }, - { 4995, true }, - { 5009, true }, - { 5028, true }, - { 5041, true }, - { 5052, true }, - { 5072, true }, - { 5090, true }, - { 5108, false }, - { 5127, true }, - { 5141, true }, - { 5162, true }, - { 5178, true }, - { 5188, true }, - { 5201, true }, - { 5214, true }, - { 5228, true }, - { 5242, true }, - { 5252, true }, - { 5262, true }, - { 5272, true }, - { 5282, true }, - { 5292, true }, - { 5302, true }, - { 5319, true }, - { 5329, false }, - { 5337, true }, - { 5348, true }, - { 5359, true }, - { 5370, true }, - { 5388, true }, - { 5397, true }, - { 5417, true }, - { 5428, true }, - { 5445, true }, - { 5469, true }, - { 5483, true }, - { 5502, true }, - { 5524, true }, - { 5534, true }, - { 5546, true }, - { 5562, true }, - { 5573, true }, - { 5587, true }, - { 5603, true }, + { 4071, true }, + { 4082, true }, + { 4099, true }, + { 4113, true }, + { 4129, true }, + { 4142, true }, + { 4159, true }, + { 4175, true }, + { 4190, true }, + { 4205, true }, + { 4223, true }, + { 4232, true }, + { 4245, true }, + { 4266, true }, + { 4275, true }, + { 4285, true }, + { 4310, true }, + { 4321, true }, + { 4333, true }, + { 4352, true }, + { 4364, true }, + { 4383, true }, + { 4402, true }, + { 4421, true }, + { 4432, true }, + { 4444, true }, + { 4459, true }, + { 4470, true }, + { 4483, true }, + { 4495, true }, + { 4508, true }, + { 4522, true }, + { 4544, true }, + { 4554, true }, + { 4576, true }, + { 4585, true }, + { 4598, true }, + { 4612, true }, + { 4624, true }, + { 4637, true }, + { 4664, true }, + { 4690, true }, + { 4701, true }, + { 4714, true }, + { 4725, true }, + { 4749, true }, + { 4766, true }, + { 4794, true }, + { 4803, true }, + { 4813, true }, + { 4827, true }, + { 4846, true }, + { 4856, true }, + { 4870, true }, + { 4878, false }, + { 4899, true }, + { 4917, true }, + { 4928, true }, + { 4938, true }, + { 4947, true }, + { 4966, true }, + { 4987, true }, + { 5001, true }, + { 5020, true }, + { 5033, true }, + { 5044, true }, + { 5064, true }, + { 5082, true }, + { 5100, false }, + { 5119, true }, + { 5133, true }, + { 5154, true }, + { 5170, true }, + { 5180, true }, + { 5193, true }, + { 5206, true }, + { 5220, true }, + { 5234, true }, + { 5244, true }, + { 5254, true }, + { 5264, true }, + { 5274, true }, + { 5284, true }, + { 5294, true }, + { 5311, true }, + { 5321, false }, + { 5329, true }, + { 5340, true }, + { 5351, true }, + { 5362, true }, + { 5380, true }, + { 5389, true }, + { 5409, true }, + { 5420, true }, + { 5437, true }, + { 5461, true }, + { 5475, true }, + { 5494, true }, + { 5516, true }, + { 5526, true }, + { 5538, true }, + { 5554, true }, + { 5565, true }, + { 5579, true }, + { 5595, true }, + { 5610, true }, { 5618, true }, - { 5626, true }, - { 5635, true }, - { 5652, false }, - { 5664, true }, - { 5683, true }, - { 5700, true }, - { 5708, false }, - { 5724, true }, - { 5742, true }, - { 5753, true }, + { 5627, true }, + { 5644, false }, + { 5656, true }, + { 5675, true }, + { 5692, true }, + { 5700, false }, + { 5716, true }, + { 5734, true }, + { 5745, true }, + { 5758, true }, { 5766, true }, - { 5774, true }, - { 5788, false }, - { 5802, true }, - { 5814, true }, - { 5824, true }, - { 5836, true }, - { 5848, true }, - { 5862, true }, - { 5874, true }, + { 5780, false }, + { 5794, true }, + { 5806, true }, + { 5816, true }, + { 5828, true }, + { 5840, true }, + { 5854, true }, + { 5866, true }, + { 5876, true }, { 5884, true }, - { 5892, true }, - { 5902, true }, - { 5916, true }, - { 5929, true }, - { 5941, true }, - { 5960, true }, - { 5979, true }, - { 5989, true }, - { 6022, true }, - { 6032, true }, - { 6046, true }, - { 6053, true }, - { 6070, true }, - { 6086, true }, - { 6095, true }, - { 6102, true }, + { 5894, true }, + { 5908, true }, + { 5921, true }, + { 5933, true }, + { 5952, true }, + { 5971, true }, + { 5981, true }, + { 6014, true }, + { 6024, true }, + { 6038, true }, + { 6045, true }, + { 6062, true }, + { 6078, true }, + { 6087, true }, + { 6094, true }, + { 6108, true }, { 6116, true }, - { 6124, true }, - { 6135, true }, - { 6150, true }, - { 6165, true }, - { 6182, true }, - { 6195, true }, - { 6205, true }, - { 6216, true }, - { 6231, true }, - { 6254, true }, - { 6265, true }, - { 6277, true }, - { 6288, true }, - { 6308, true }, - { 6319, true }, - { 6330, true }, - { 6341, true }, - { 6352, true }, - { 6365, true }, - { 6383, true }, - { 6395, true }, - { 6412, true }, - { 6421, true }, - { 6435, true }, - { 6446, true }, - { 6463, true }, - { 6474, true }, - { 6482, true }, - { 6491, false }, + { 6127, true }, + { 6142, true }, + { 6157, true }, + { 6174, true }, + { 6187, true }, + { 6197, true }, + { 6208, true }, + { 6223, true }, + { 6246, true }, + { 6257, true }, + { 6269, true }, + { 6280, true }, + { 6300, true }, + { 6311, true }, + { 6322, true }, + { 6333, true }, + { 6344, true }, + { 6362, true }, + { 6374, true }, + { 6391, true }, + { 6400, true }, + { 6414, true }, + { 6425, true }, + { 6442, true }, + { 6453, true }, + { 6461, true }, + { 6470, false }, + { 6496, false }, + { 6507, true }, { 6517, false }, - { 6528, true }, - { 6538, false }, - { 6555, true }, - { 6565, true }, + { 6534, true }, + { 6544, true }, + { 6557, true }, + { 6569, true }, { 6578, true }, - { 6590, true }, - { 6599, true }, - { 6616, true }, - { 6623, true }, - { 6647, true }, - { 6663, true }, - { 6683, true }, - { 6708, true }, - { 6733, true }, - { 6758, true }, + { 6595, true }, + { 6602, true }, + { 6626, true }, + { 6642, true }, + { 6662, true }, + { 6687, true }, + { 6712, true }, + { 6737, true }, + { 6749, true }, + { 6761, true }, { 6770, true }, - { 6782, true }, - { 6791, true }, - { 6818, true }, - { 6831, false }, - { 6840, true }, - { 6856, true }, - { 6872, true }, - { 6884, true }, - { 6898, true }, - { 6918, true }, + { 6797, true }, + { 6810, false }, + { 6819, true }, + { 6835, true }, + { 6851, true }, + { 6863, true }, + { 6877, true }, + { 6897, true }, + { 6912, true }, { 6933, true }, + { 6944, true }, { 6954, true }, - { 6965, true }, - { 6975, true }, + { 6966, true }, + { 6978, true }, { 6987, true }, { 6999, true }, - { 7008, true }, - { 7020, true }, - { 7039, true }, - { 7052, true }, - { 7063, true }, - { 7072, true }, - { 7090, true }, - { 7104, true }, - { 7118, true }, - { 7134, true }, - { 7150, true }, + { 7018, true }, + { 7031, true }, + { 7042, true }, + { 7051, true }, + { 7069, true }, + { 7083, true }, + { 7097, true }, + { 7113, true }, + { 7129, true }, + { 7149, true }, { 7170, true }, - { 7191, true }, - { 7205, true }, - { 7218, true }, - { 7233, true }, - { 7243, true }, - { 7261, true }, - { 7276, true }, - { 7294, true }, - { 7304, true }, - { 7319, true }, - { 7337, true }, - { 7351, true }, - { 7365, true }, - { 7379, true }, - { 7391, true }, - { 7406, true }, - { 7420, true }, - { 7435, true }, - { 7445, true }, - { 7459, true }, - { 7474, true }, - { 7488, true }, - { 7502, true }, - { 7518, true }, - { 7530, true }, - { 7543, false }, - { 7558, true }, - { 7585, true }, - { 7597, true }, - { 7612, true }, - { 7626, true }, - { 7648, true }, - { 7660, true }, + { 7184, true }, + { 7197, true }, + { 7212, true }, + { 7222, true }, + { 7240, true }, + { 7255, true }, + { 7273, true }, + { 7283, true }, + { 7298, true }, + { 7316, true }, + { 7330, true }, + { 7344, true }, + { 7358, true }, + { 7370, true }, + { 7385, true }, + { 7399, true }, + { 7414, true }, + { 7424, true }, + { 7438, true }, + { 7453, true }, + { 7467, true }, + { 7481, true }, + { 7497, true }, + { 7509, true }, + { 7522, false }, + { 7537, true }, + { 7564, true }, + { 7576, true }, + { 7591, true }, + { 7605, true }, + { 7627, true }, + { 7639, true }, + { 7662, true }, { 7683, true }, - { 7704, true }, - { 7716, true }, - { 7728, true }, - { 7741, true }, - { 7756, true }, - { 7767, false }, - { 7783, true }, - { 7794, true }, - { 7806, true }, - { 7819, true }, - { 7839, true }, - { 7852, true }, - { 7870, true }, - { 7887, true }, - { 7911, true }, - { 7930, true }, - { 7944, true }, - { 7957, true }, - { 7973, true }, - { 7989, true }, - { 8008, true }, + { 7695, true }, + { 7707, true }, + { 7720, true }, + { 7735, true }, + { 7746, false }, + { 7762, true }, + { 7773, true }, + { 7785, true }, + { 7798, true }, + { 7818, true }, + { 7831, true }, + { 7849, true }, + { 7866, true }, + { 7890, true }, + { 7909, true }, + { 7923, true }, + { 7936, true }, + { 7952, true }, + { 7968, true }, + { 7987, true }, + { 8000, true }, { 8021, true }, - { 8042, true }, - { 8062, true }, - { 8082, true }, - { 8098, true }, - { 8111, false }, - { 8124, true }, - { 8136, true }, - { 8146, true }, - { 8159, true }, - { 8173, true }, - { 8189, true }, - { 8203, true }, - { 8219, true }, - { 8231, true }, - { 8245, true }, - { 8256, true }, - { 8275, true }, - { 8288, true }, + { 8041, true }, + { 8061, true }, + { 8077, true }, + { 8090, false }, + { 8103, true }, + { 8115, true }, + { 8125, true }, + { 8138, true }, + { 8152, true }, + { 8168, true }, + { 8182, true }, + { 8198, true }, + { 8210, true }, + { 8224, true }, + { 8235, true }, + { 8254, true }, + { 8267, true }, + { 8281, true }, + { 8289, true }, { 8302, true }, - { 8310, true }, - { 8323, true }, - { 8338, true }, - { 8355, true }, - { 8374, true }, - { 8386, true }, - { 8400, true }, - { 8422, true }, - { 8436, true }, - { 8448, true }, - { 8476, true }, - { 8491, true }, - { 8503, true }, - { 8514, true }, - { 8525, true }, - { 8539, true }, - { 8551, true }, - { 8559, true }, - { 8570, true }, - { 8578, true }, - { 8586, true }, + { 8317, true }, + { 8334, true }, + { 8353, true }, + { 8365, true }, + { 8379, true }, + { 8401, true }, + { 8415, true }, + { 8427, true }, + { 8455, true }, + { 8470, true }, + { 8482, true }, + { 8493, true }, + { 8504, true }, + { 8518, true }, + { 8530, true }, + { 8538, true }, + { 8549, true }, + { 8557, true }, + { 8565, true }, + { 8573, true }, + { 8581, true }, { 8594, true }, - { 8602, true }, - { 8615, true }, - { 8622, true }, - { 8632, true }, - { 8645, true }, - { 8657, true }, - { 8670, true }, - { 8690, true }, - { 8702, true }, - { 8714, true }, - { 8732, true }, - { 8745, true }, - { 8754, true }, - { 8767, true }, - { 8779, true }, - { 8793, true }, + { 8601, true }, + { 8611, true }, + { 8624, true }, + { 8636, true }, + { 8649, true }, + { 8669, true }, + { 8681, true }, + { 8693, true }, + { 8711, true }, + { 8724, true }, + { 8733, true }, + { 8746, true }, + { 8758, true }, + { 8772, true }, + { 8785, true }, + { 8796, true }, { 8806, true }, { 8817, true }, { 8827, true }, { 8838, true }, - { 8848, true }, - { 8859, true }, - { 8868, true }, - { 8884, true }, - { 8900, true }, - { 8928, true }, - { 8947, true }, - { 8962, true }, - { 8982, true }, - { 8994, true }, - { 9006, true }, - { 9019, true }, - { 9028, true }, - { 9037, true }, - { 9056, true }, - { 9067, true }, - { 9078, true }, - { 9093, true }, - { 9113, true }, - { 9131, true }, - { 9141, true }, + { 8847, true }, + { 8863, true }, + { 8879, true }, + { 8907, true }, + { 8926, true }, + { 8941, true }, + { 8961, true }, + { 8973, true }, + { 8985, true }, + { 8998, true }, + { 9007, true }, + { 9016, true }, + { 9035, true }, + { 9046, true }, + { 9057, true }, + { 9072, true }, + { 9092, true }, + { 9110, true }, + { 9120, true }, + { 9137, true }, + { 9148, true }, { 9158, true }, - { 9169, true }, - { 9179, true }, - { 9193, true }, - { 9210, true }, - { 9219, true }, - { 9230, true }, - { 9250, true }, - { 9269, true }, - { 9280, true }, - { 9291, true }, - { 9309, true }, - { 9335, false }, - { 9346, true }, - { 9368, true }, - { 9390, true }, - { 9404, true }, - { 9419, true }, - { 9433, true }, - { 9447, true }, + { 9172, true }, + { 9189, true }, + { 9198, true }, + { 9209, true }, + { 9229, true }, + { 9248, true }, + { 9259, true }, + { 9270, true }, + { 9288, true }, + { 9314, false }, + { 9325, true }, + { 9347, true }, + { 9369, true }, + { 9383, true }, + { 9398, true }, + { 9412, true }, + { 9426, true }, + { 9441, true }, { 9462, true }, + { 9472, true }, { 9483, true }, - { 9493, true }, { 9504, true }, - { 9525, true }, - { 9543, true }, + { 9522, true }, + { 9540, true }, + { 9553, true }, { 9561, true }, { 9574, true }, - { 9582, true }, - { 9595, true }, - { 9609, true }, - { 9627, true }, - { 9649, true }, - { 9664, true }, - { 9681, true }, - { 9703, true }, - { 9718, true }, + { 9588, true }, + { 9606, true }, + { 9628, true }, + { 9643, true }, + { 9660, true }, + { 9682, true }, + { 9697, true }, + { 9714, true }, { 9735, true }, - { 9756, true }, - { 9772, true }, - { 9799, true }, - { 9815, true }, - { 9832, true }, - { 9847, true }, - { 9861, true }, - { 9878, true }, - { 9895, true }, - { 9907, true }, - { 9925, true }, - { 9942, true }, - { 9957, true }, - { 9971, true }, - { 9988, true }, - { 10006, true }, - { 10021, true }, - { 10033, true }, - { 10049, true }, - { 10062, true }, - { 10082, true }, - { 10102, true }, - { 10113, true }, - { 10124, true }, - { 10135, true }, - { 10150, true }, - { 10161, true }, - { 10178, true }, - { 10194, true }, - { 10205, true }, - { 10216, true }, - { 10228, true }, - { 10241, true }, - { 10260, true }, - { 10271, true }, - { 10284, true }, - { 10298, true }, - { 10316, false }, - { 10329, false }, - { 10338, true }, - { 10355, true }, - { 10372, true }, - { 10392, true }, - { 10403, true }, - { 10414, true }, - { 10432, true }, - { 10464, true }, - { 10491, true }, - { 10503, true }, - { 10513, true }, - { 10531, true }, - { 10546, true }, - { 10558, true }, - { 10570, true }, - { 10590, true }, - { 10609, true }, - { 10629, true }, - { 10652, false }, - { 10676, true }, - { 10688, true }, - { 10699, true }, - { 10711, true }, - { 10723, true }, - { 10739, true }, - { 10756, true }, - { 10775, true }, - { 10789, true }, - { 10800, true }, - { 10816, true }, - { 10835, true }, - { 10848, true }, - { 10861, true }, - { 10873, false }, - { 10897, true }, - { 10913, true }, - { 10929, true }, - { 10941, true }, - { 10957, true }, - { 10974, true }, - { 10988, true }, - { 11003, true }, - { 11018, true }, - { 11029, true }, - { 11047, true }, + { 9751, true }, + { 9778, true }, + { 9794, true }, + { 9811, true }, + { 9826, true }, + { 9840, true }, + { 9857, true }, + { 9874, true }, + { 9886, true }, + { 9904, true }, + { 9921, true }, + { 9936, true }, + { 9950, true }, + { 9967, true }, + { 9985, true }, + { 10000, true }, + { 10012, true }, + { 10028, true }, + { 10041, true }, + { 10061, true }, + { 10081, true }, + { 10092, true }, + { 10103, true }, + { 10114, true }, + { 10129, true }, + { 10140, true }, + { 10157, true }, + { 10173, true }, + { 10184, true }, + { 10195, true }, + { 10207, true }, + { 10220, true }, + { 10239, true }, + { 10250, true }, + { 10263, true }, + { 10277, true }, + { 10295, false }, + { 10308, false }, + { 10317, true }, + { 10334, true }, + { 10351, true }, + { 10371, true }, + { 10382, true }, + { 10393, true }, + { 10411, true }, + { 10443, true }, + { 10470, true }, + { 10482, true }, + { 10492, true }, + { 10510, true }, + { 10525, true }, + { 10537, true }, + { 10549, true }, + { 10569, true }, + { 10588, true }, + { 10608, true }, + { 10631, false }, + { 10655, true }, + { 10667, true }, + { 10678, true }, + { 10690, true }, + { 10702, true }, + { 10718, true }, + { 10735, true }, + { 10754, true }, + { 10768, true }, + { 10779, true }, + { 10795, true }, + { 10814, true }, + { 10827, true }, + { 10840, true }, + { 10852, false }, + { 10876, true }, + { 10892, true }, + { 10908, true }, + { 10920, true }, + { 10936, true }, + { 10953, true }, + { 10967, true }, + { 10982, true }, + { 10997, true }, + { 11008, true }, + { 11026, true }, + { 11042, true }, { 11063, true }, - { 11084, true }, - { 11098, true }, - { 11113, true }, - { 11123, true }, - { 11136, true }, - { 11153, false }, - { 11160, true }, - { 11173, true }, - { 11186, true }, - { 11202, true }, - { 11213, true }, - { 11225, true }, - { 11236, true }, - { 11243, true }, - { 11251, false }, - { 11262, true }, + { 11077, true }, + { 11092, true }, + { 11102, true }, + { 11115, true }, + { 11132, false }, + { 11139, true }, + { 11152, true }, + { 11165, true }, + { 11181, true }, + { 11192, true }, + { 11204, true }, + { 11215, true }, + { 11222, true }, + { 11230, false }, + { 11241, true }, + { 11252, true }, + { 11265, false }, { 11273, true }, - { 11286, false }, - { 11294, true }, - { 11304, true }, - { 11311, true }, - { 11325, false }, - { 11339, true }, - { 11355, true }, - { 11364, true }, - { 11394, true }, - { 11417, true }, - { 11430, true }, - { 11449, true }, - { 11462, false }, - { 11481, true }, - { 11497, false }, - { 11513, true }, - { 11529, false }, - { 11544, false }, - { 11557, true }, - { 11573, true }, - { 11585, true }, + { 11283, true }, + { 11290, true }, + { 11304, false }, + { 11318, true }, + { 11334, true }, + { 11343, true }, + { 11373, true }, + { 11396, true }, + { 11409, true }, + { 11428, true }, + { 11441, false }, + { 11460, true }, + { 11476, false }, + { 11492, true }, + { 11508, false }, + { 11523, false }, + { 11536, true }, + { 11552, true }, + { 11564, true }, + { 11583, true }, { 11604, true }, - { 11625, true }, - { 11638, true }, + { 11617, true }, + { 11630, true }, + { 11640, true }, { 11651, true }, - { 11661, true }, - { 11672, true }, - { 11683, true }, - { 11697, true }, - { 11713, true }, - { 11730, false }, - { 11747, true }, - { 11773, true }, - { 11786, true }, - { 11800, true }, + { 11662, true }, + { 11676, true }, + { 11692, true }, + { 11709, false }, + { 11726, true }, + { 11752, true }, + { 11765, true }, + { 11779, true }, + { 11798, true }, { 11819, true }, - { 11840, true }, - { 11852, true }, - { 11866, true }, - { 11890, true }, - { 11899, true }, - { 11912, true }, - { 11925, true }, - { 11939, true }, - { 11950, true }, - { 11959, true }, - { 11972, true }, - { 11985, true }, - { 11997, true }, - { 12018, false }, - { 12036, true }, - { 12059, true }, - { 12086, true }, - { 12105, true }, - { 12125, true }, - { 12136, true }, - { 12153, true }, - { 12165, true }, - { 12179, true }, - { 12187, true }, - { 12204, true }, - { 12217, true }, - { 12229, true }, - { 12247, true }, - { 12270, false }, - { 12286, true }, - { 12292, true }, - { 12304, true }, - { 12314, true }, + { 11831, true }, + { 11845, true }, + { 11869, true }, + { 11878, true }, + { 11891, true }, + { 11904, true }, + { 11918, true }, + { 11929, true }, + { 11938, true }, + { 11951, true }, + { 11964, true }, + { 11976, true }, + { 11997, false }, + { 12015, true }, + { 12038, true }, + { 12065, true }, + { 12084, true }, + { 12104, true }, + { 12115, true }, + { 12132, true }, + { 12144, true }, + { 12158, true }, + { 12166, true }, + { 12183, true }, + { 12196, true }, + { 12208, true }, + { 12226, true }, + { 12249, false }, + { 12265, true }, + { 12271, true }, + { 12283, true }, + { 12293, true }, + { 12305, true }, + { 12316, true }, { 12326, true }, - { 12337, true }, - { 12347, true }, - { 12364, true }, - { 12383, true }, - { 12395, true }, - { 12407, true }, - { 12420, true }, - { 12446, true }, - { 12462, true }, - { 12475, true }, - { 12489, true }, - { 12505, true }, - { 12524, true }, - { 12548, true }, - { 12561, true }, + { 12343, true }, + { 12362, true }, + { 12374, true }, + { 12386, true }, + { 12399, true }, + { 12425, true }, + { 12441, true }, + { 12454, true }, + { 12468, true }, + { 12484, true }, + { 12503, true }, + { 12527, true }, + { 12540, true }, + { 12551, true }, + { 12560, true }, { 12572, true }, - { 12581, true }, - { 12593, true }, - { 12609, true }, - { 12623, true }, - { 12639, true }, - { 12659, true }, - { 12673, true }, - { 12681, true }, - { 12695, true }, - { 12713, true }, - { 12733, true }, - { 12755, true }, - { 12767, true }, - { 12783, true }, - { 12797, false }, - { 12810, true }, - { 12825, true }, - { 12843, true }, + { 12588, true }, + { 12602, true }, + { 12618, true }, + { 12638, true }, + { 12652, true }, + { 12660, true }, + { 12674, true }, + { 12692, true }, + { 12712, true }, + { 12734, true }, + { 12746, true }, + { 12762, true }, + { 12776, false }, + { 12789, true }, + { 12804, true }, + { 12822, true }, + { 12836, true }, + { 12845, true }, { 12857, true }, - { 12866, true }, - { 12878, true }, - { 12896, true }, - { 12916, false }, - { 12931, true }, - { 12944, true }, - { 12954, true }, - { 12968, true }, - { 12994, true }, - { 13004, true }, - { 13018, true }, - { 13030, true }, - { 13048, true }, - { 13066, false }, + { 12875, true }, + { 12895, false }, + { 12910, true }, + { 12923, true }, + { 12933, true }, + { 12947, true }, + { 12973, true }, + { 12983, true }, + { 12997, true }, + { 13009, true }, + { 13027, true }, + { 13045, false }, + { 13061, true }, + { 13071, true }, { 13082, true }, - { 13092, true }, - { 13103, true }, - { 13116, true }, - { 13132, true }, + { 13095, true }, + { 13111, true }, + { 13119, true }, + { 13130, true }, { 13140, true }, - { 13151, true }, - { 13161, true }, - { 13176, true }, - { 13195, true }, - { 13208, true }, - { 13226, false }, - { 13241, true }, - { 13261, true }, - { 13272, true }, - { 13284, true }, - { 13297, true }, - { 13317, false }, - { 13331, true }, - { 13344, true }, - { 13362, true }, - { 13376, true }, - { 13389, true }, - { 13401, true }, - { 13415, true }, - { 13428, true }, - { 13442, true }, - { 13454, true }, - { 13472, true }, - { 13484, true }, - { 13495, true }, - { 13506, true }, - { 13519, true }, - { 13532, true }, - { 13547, true }, - { 13558, true }, + { 13155, true }, + { 13174, true }, + { 13187, true }, + { 13205, false }, + { 13220, true }, + { 13240, true }, + { 13251, true }, + { 13263, true }, + { 13276, true }, + { 13296, false }, + { 13310, true }, + { 13323, true }, + { 13341, true }, + { 13355, true }, + { 13368, true }, + { 13380, true }, + { 13394, true }, + { 13407, true }, + { 13421, true }, + { 13433, true }, + { 13451, true }, + { 13463, true }, + { 13474, true }, + { 13485, true }, + { 13498, true }, + { 13511, true }, + { 13526, true }, + { 13537, true }, + { 13548, true }, + { 13559, true }, { 13569, true }, - { 13580, true }, { 13590, true }, - { 13611, true }, - { 13620, true }, - { 13627, true }, - { 13641, false }, - { 13654, true }, - { 13664, true }, - { 13677, true }, - { 13690, true }, - { 13702, true }, - { 13719, true }, - { 13730, true }, - { 13744, true }, - { 13754, true }, - { 13772, true }, - { 13782, true }, - { 13794, true }, - { 13808, true }, - { 13825, true }, - { 13839, true }, - { 13849, true }, - { 13865, true }, - { 13876, true }, - { 13893, true }, - { 13905, true }, - { 13927, true }, - { 13953, true }, - { 13968, true }, - { 13981, true }, + { 13599, true }, + { 13606, true }, + { 13620, false }, + { 13633, true }, + { 13643, true }, + { 13656, true }, + { 13669, true }, + { 13681, true }, + { 13698, true }, + { 13709, true }, + { 13723, true }, + { 13733, true }, + { 13751, true }, + { 13761, true }, + { 13773, true }, + { 13787, true }, + { 13804, true }, + { 13818, true }, + { 13828, true }, + { 13844, true }, + { 13855, true }, + { 13872, true }, + { 13884, true }, + { 13906, true }, + { 13932, true }, + { 13947, true }, + { 13960, true }, + { 13978, true }, + { 13989, true }, { 13999, true }, - { 14010, true }, - { 14020, true }, - { 14030, true }, - { 14049, true }, - { 14069, true }, - { 14081, true }, - { 14095, true }, - { 14102, true }, - { 14112, true }, - { 14122, true }, - { 14144, true }, - { 14156, true }, - { 14174, true }, - { 14186, true }, - { 14199, true }, - { 14227, true }, - { 14236, true }, - { 14246, true }, - { 14254, true }, - { 14266, false }, - { 14286, true }, - { 14293, true }, - { 14309, true }, - { 14325, true }, - { 14340, true }, - { 14350, true }, - { 14368, true }, - { 14383, true }, - { 14410, true }, - { 14427, true }, - { 14445, true }, - { 14453, true }, - { 14467, true }, - { 14478, true }, - { 14487, true }, - { 14514, true }, - { 14522, true }, - { 14532, true }, - { 14548, true }, - { 14560, true }, - { 14575, true }, - { 14587, true }, + { 14009, true }, + { 14028, true }, + { 14048, true }, + { 14060, true }, + { 14074, true }, + { 14096, true }, + { 14108, true }, + { 14126, true }, + { 14138, true }, + { 14151, true }, + { 14179, true }, + { 14188, true }, + { 14198, true }, + { 14206, true }, + { 14218, false }, + { 14238, true }, + { 14245, true }, + { 14261, true }, + { 14277, true }, + { 14292, true }, + { 14302, true }, + { 14320, true }, + { 14335, true }, + { 14362, true }, + { 14379, true }, + { 14397, true }, + { 14405, true }, + { 14419, true }, + { 14430, true }, + { 14439, true }, + { 14466, true }, + { 14474, true }, + { 14484, true }, + { 14500, true }, + { 14512, true }, + { 14527, true }, + { 14539, true }, + { 14554, true }, + { 14569, true }, + { 14581, true }, { 14602, true }, - { 14617, true }, - { 14629, true }, - { 14650, true }, - { 14667, true }, - { 14681, true }, - { 14693, true }, - { 14703, true }, - { 14713, true }, - { 14728, true }, - { 14743, true }, - { 14754, true }, - { 14767, true }, - { 14780, true }, - { 14792, true }, - { 14800, true }, - { 14813, true }, - { 14831, true }, - { 14852, true }, - { 14866, true }, - { 14882, true }, - { 14894, true }, + { 14619, true }, + { 14633, true }, + { 14645, true }, + { 14659, true }, + { 14669, true }, + { 14679, true }, + { 14694, true }, + { 14709, true }, + { 14720, true }, + { 14733, true }, + { 14746, true }, + { 14758, true }, + { 14766, true }, + { 14779, true }, + { 14797, true }, + { 14818, true }, + { 14832, true }, + { 14848, true }, + { 14860, true }, + { 14872, true }, + { 14884, true }, + { 14896, true }, { 14906, true }, - { 14918, true }, - { 14930, true }, - { 14940, true }, - { 14950, true }, - { 14961, true }, - { 14976, true }, - { 14989, true }, - { 15008, true }, - { 15020, true }, - { 15036, true }, - { 15048, true }, - { 15064, true }, - { 15083, true }, - { 15096, true }, - { 15107, true }, - { 15125, true }, - { 15155, true }, - { 15178, true }, - { 15191, false }, - { 15199, true }, + { 14916, true }, + { 14927, true }, + { 14942, true }, + { 14955, true }, + { 14974, true }, + { 14986, true }, + { 15002, true }, + { 15014, true }, + { 15030, true }, + { 15049, true }, + { 15062, true }, + { 15073, true }, + { 15091, true }, + { 15121, true }, + { 15144, true }, + { 15157, false }, + { 15165, true }, + { 15177, true }, + { 15187, true }, + { 15197, true }, { 15211, true }, - { 15221, true }, - { 15231, true }, - { 15245, true }, - { 15261, true }, - { 15290, true }, + { 15227, true }, + { 15256, true }, + { 15272, true }, + { 15288, true }, { 15306, true }, - { 15322, true }, - { 15340, true }, - { 15361, true }, - { 15372, true }, - { 15384, true }, - { 15396, true }, - { 15414, true }, - { 15432, true }, - { 15453, true }, - { 15478, true }, - { 15496, true }, - { 15521, true }, - { 15534, true }, - { 15549, true }, - { 15564, true }, - { 15577, true }, - { 15590, true }, - { 15603, true }, - { 15616, true }, - { 15629, true }, - { 15642, true }, - { 15653, true }, - { 15669, true }, - { 15679, true }, - { 15691, true }, - { 15708, true }, - { 15720, true }, - { 15733, true }, - { 15741, true }, - { 15752, true }, - { 15763, true }, - { 15781, true }, - { 15796, true }, - { 15814, true }, - { 15824, true }, - { 15834, true }, - { 15843, true }, - { 15865, true }, - { 15879, true }, - { 15890, true }, - { 15898, true }, - { 15908, true }, - { 15920, true }, - { 15928, true }, - { 15938, true }, - { 15953, true }, - { 15961, true }, - { 15986, true }, - { 16002, true }, - { 16026, true }, - { 16033, true }, - { 16041, true }, - { 16050, true }, + { 15327, true }, + { 15338, true }, + { 15350, true }, + { 15362, true }, + { 15380, true }, + { 15398, true }, + { 15419, true }, + { 15444, true }, + { 15462, true }, + { 15487, true }, + { 15500, true }, + { 15515, true }, + { 15530, true }, + { 15543, true }, + { 15556, true }, + { 15569, true }, + { 15582, true }, + { 15595, true }, + { 15608, true }, + { 15619, true }, + { 15635, true }, + { 15645, true }, + { 15657, true }, + { 15674, true }, + { 15686, true }, + { 15699, true }, + { 15707, true }, + { 15718, true }, + { 15729, true }, + { 15747, true }, + { 15762, true }, + { 15780, true }, + { 15790, true }, + { 15800, true }, + { 15809, true }, + { 15831, true }, + { 15845, true }, + { 15856, true }, + { 15864, true }, + { 15874, true }, + { 15886, true }, + { 15894, true }, + { 15904, true }, + { 15919, true }, + { 15927, true }, + { 15952, true }, + { 15968, true }, + { 15992, true }, + { 15999, true }, + { 16007, true }, + { 16016, true }, + { 16023, true }, + { 16035, true }, + { 16046, true }, { 16057, true }, { 16069, true }, - { 16080, true }, - { 16091, true }, - { 16103, true }, - { 16115, false }, - { 16124, true }, - { 16140, true }, - { 16153, true }, + { 16081, false }, + { 16090, true }, + { 16106, true }, + { 16119, true }, + { 16128, true }, + { 16137, true }, + { 16152, true }, { 16162, true }, - { 16171, true }, - { 16186, true }, + { 16180, false }, { 16196, true }, - { 16214, false }, - { 16230, true }, - { 16242, true }, - { 16252, true }, - { 16262, true }, - { 16272, true }, - { 16284, true }, - { 16297, true }, - { 16310, true }, - { 16320, true }, - { 16330, true }, - { 16338, true }, - { 16350, true }, - { 16362, true }, - { 16375, true }, - { 16391, true }, - { 16407, true }, - { 16418, false }, - { 16428, true }, - { 16445, true }, - { 16459, true }, - { 16489, true }, - { 16504, false }, - { 16513, true }, - { 16527, true }, - { 16548, true }, - { 16559, true }, - { 16572, true }, - { 16596, true }, - { 16610, true }, - { 16623, true }, + { 16208, true }, + { 16218, true }, + { 16228, true }, + { 16238, true }, + { 16250, true }, + { 16263, true }, + { 16276, true }, + { 16286, true }, + { 16296, true }, + { 16304, true }, + { 16316, true }, + { 16328, true }, + { 16341, true }, + { 16357, true }, + { 16373, true }, + { 16384, false }, + { 16394, true }, + { 16411, true }, + { 16425, true }, + { 16455, true }, + { 16470, false }, + { 16479, true }, + { 16493, true }, + { 16514, true }, + { 16525, true }, + { 16538, true }, + { 16562, true }, + { 16576, true }, + { 16589, true }, + { 16601, true }, + { 16624, true }, { 16635, true }, - { 16658, true }, - { 16669, true }, - { 16689, true }, - { 16707, true }, - { 16725, true }, - { 16740, true }, + { 16655, true }, + { 16673, true }, + { 16691, true }, + { 16706, true }, + { 16721, true }, + { 16745, true }, { 16755, true }, - { 16779, true }, - { 16789, true }, + { 16765, true }, + { 16775, true }, + { 16788, true }, { 16799, true }, - { 16809, true }, - { 16822, true }, - { 16833, true }, - { 16858, true }, - { 16887, true }, - { 16900, true }, - { 16910, true }, - { 16918, true }, - { 16927, true }, - { 16941, false }, + { 16824, true }, + { 16853, true }, + { 16866, true }, + { 16876, true }, + { 16884, true }, + { 16893, true }, + { 16907, false }, + { 16924, true }, + { 16936, true }, + { 16951, true }, { 16958, true }, - { 16970, true }, - { 16985, true }, - { 16992, true }, + { 16971, true }, + { 16983, true }, + { 16997, true }, { 17005, true }, - { 17017, true }, - { 17031, true }, + { 17014, true }, + { 17027, true }, { 17039, true }, - { 17048, true }, - { 17061, true }, - { 17073, true }, - { 17084, true }, - { 17094, true }, - { 17109, true }, - { 17126, true }, - { 17139, true }, - { 17149, true }, - { 17162, true }, - { 17176, true }, - { 17190, true }, - { 17202, true }, - { 17217, true }, - { 17233, true }, - { 17248, true }, - { 17262, true }, - { 17275, true }, - { 17291, true }, - { 17303, true }, - { 17317, true }, + { 17050, true }, + { 17060, true }, + { 17075, true }, + { 17092, true }, + { 17105, true }, + { 17115, true }, + { 17128, true }, + { 17142, true }, + { 17156, true }, + { 17168, true }, + { 17183, true }, + { 17199, true }, + { 17214, true }, + { 17228, true }, + { 17241, true }, + { 17257, true }, + { 17269, true }, + { 17283, true }, + { 17295, true }, + { 17307, true }, + { 17318, true }, { 17329, true }, - { 17341, true }, - { 17352, true }, - { 17363, true }, - { 17378, false }, - { 17393, false }, - { 17409, true }, - { 17431, true }, - { 17449, true }, - { 17466, true }, - { 17484, true }, - { 17495, true }, - { 17508, true }, - { 17525, true }, - { 17541, true }, - { 17561, true }, - { 17576, true }, - { 17591, true }, - { 17605, true }, - { 17616, true }, - { 17628, true }, - { 17641, true }, - { 17654, true }, - { 17668, true }, - { 17681, true }, - { 17699, true }, - { 17717, true }, - { 17735, true }, - { 17752, true }, - { 17762, true }, - { 17775, true }, - { 17784, true }, - { 17799, true }, - { 17810, false }, - { 17820, true }, - { 17831, true }, - { 17845, true }, - { 17858, true }, - { 17868, true }, - { 17881, true }, - { 17895, true }, - { 17906, true }, - { 17916, true }, - { 17934, true }, - { 17943, true }, - { 17960, true }, + { 17344, false }, + { 17359, false }, + { 17375, true }, + { 17397, true }, + { 17415, true }, + { 17432, true }, + { 17450, true }, + { 17461, true }, + { 17474, true }, + { 17491, true }, + { 17507, true }, + { 17527, true }, + { 17542, true }, + { 17557, true }, + { 17571, true }, + { 17582, true }, + { 17594, true }, + { 17607, true }, + { 17620, true }, + { 17634, true }, + { 17647, true }, + { 17665, true }, + { 17683, true }, + { 17701, true }, + { 17718, true }, + { 17728, true }, + { 17741, true }, + { 17750, true }, + { 17765, true }, + { 17776, false }, + { 17786, true }, + { 17797, true }, + { 17811, true }, + { 17824, true }, + { 17834, true }, + { 17847, true }, + { 17861, true }, + { 17872, true }, + { 17882, true }, + { 17900, true }, + { 17909, true }, + { 17926, true }, + { 17946, true }, + { 17965, true }, { 17980, true }, - { 17999, true }, - { 18014, true }, - { 18034, true }, - { 18052, true }, - { 18063, true }, - { 18076, true }, - { 18091, true }, - { 18104, true }, - { 18115, true }, - { 18129, true }, + { 18000, true }, + { 18018, true }, + { 18029, true }, + { 18042, true }, + { 18057, true }, + { 18070, true }, + { 18081, true }, + { 18095, true }, + { 18119, true }, + { 18145, true }, { 18153, true }, - { 18179, true }, - { 18187, true }, - { 18197, true }, - { 18208, true }, - { 18219, true }, - { 18246, true }, - { 18258, true }, - { 18270, true }, - { 18279, true }, - { 18288, true }, - { 18297, true }, - { 18312, false }, - { 18323, true }, - { 18332, true }, - { 18344, true }, - { 18353, true }, - { 18363, true }, - { 18374, true }, + { 18163, true }, + { 18174, true }, + { 18185, true }, + { 18212, true }, + { 18224, true }, + { 18236, true }, + { 18245, true }, + { 18254, true }, + { 18263, true }, + { 18278, false }, + { 18289, true }, + { 18298, true }, + { 18310, true }, + { 18319, true }, + { 18329, true }, + { 18340, true }, + { 18352, true }, + { 18362, true }, + { 18376, true }, { 18386, true }, { 18396, true }, - { 18410, true }, - { 18420, true }, + { 18409, true }, + { 18419, false }, { 18430, true }, - { 18443, true }, - { 18453, false }, - { 18464, true }, - { 18482, true }, + { 18448, true }, + { 18458, true }, + { 18465, true }, + { 18477, true }, { 18492, true }, - { 18499, true }, - { 18511, true }, + { 18513, true }, { 18526, true }, - { 18547, true }, - { 18560, true }, - { 18573, true }, - { 18590, true }, - { 18602, true }, - { 18615, false }, - { 18629, true }, - { 18641, true }, - { 18655, true }, + { 18539, true }, + { 18556, true }, + { 18568, true }, + { 18581, false }, + { 18595, true }, + { 18607, true }, + { 18621, true }, + { 18639, true }, + { 18651, true }, + { 18664, true }, { 18673, true }, - { 18685, true }, - { 18698, true }, - { 18707, true }, - { 18725, true }, - { 18736, true }, - { 18747, true }, - { 18772, true }, - { 18786, true }, - { 18799, true }, - { 18813, true }, - { 18826, true }, - { 18840, true }, - { 18852, true }, - { 18868, false }, - { 18879, true }, - { 18894, true }, - { 18907, true }, - { 18920, true }, + { 18691, true }, + { 18702, true }, + { 18713, true }, + { 18738, true }, + { 18752, true }, + { 18765, true }, + { 18779, true }, + { 18792, true }, + { 18806, true }, + { 18818, true }, + { 18834, false }, + { 18845, true }, + { 18860, true }, + { 18873, true }, + { 18886, true }, + { 18902, true }, + { 18924, true }, { 18936, true }, - { 18958, true }, - { 18970, true }, - { 18983, true }, - { 18998, true }, - { 19010, true }, - { 19026, true }, - { 19039, true }, - { 19049, true }, - { 19077, true }, - { 19092, true }, - { 19108, true }, + { 18949, true }, + { 18964, true }, + { 18976, true }, + { 18992, true }, + { 19005, true }, + { 19015, true }, + { 19043, true }, + { 19058, true }, + { 19074, true }, + { 19085, true }, + { 19096, true }, + { 19106, true }, { 19119, true }, - { 19130, true }, - { 19140, true }, - { 19153, true }, - { 19163, false }, - { 19177, true }, - { 19186, true }, - { 19198, false }, - { 19217, true }, - { 19244, true }, - { 19265, true }, - { 19281, true }, - { 19292, true }, - { 19310, true }, - { 19325, true }, - { 19336, true }, - { 19351, false }, - { 19366, true }, - { 19376, true }, - { 19387, true }, - { 19401, true }, - { 19423, true }, - { 19436, true }, - { 19451, true }, - { 19466, true }, - { 19487, true }, - { 19497, true }, - { 19511, true }, - { 19524, true }, - { 19539, true }, - { 19560, true }, - { 19578, true }, - { 19590, true }, - { 19608, true }, - { 19626, true }, - { 19640, true }, - { 19659, false }, - { 19673, true }, + { 19129, false }, + { 19143, true }, + { 19152, true }, + { 19164, false }, + { 19183, true }, + { 19210, true }, + { 19231, true }, + { 19247, true }, + { 19258, true }, + { 19276, true }, + { 19291, true }, + { 19302, true }, + { 19317, false }, + { 19332, true }, + { 19342, true }, + { 19353, true }, + { 19367, true }, + { 19389, true }, + { 19402, true }, + { 19417, true }, + { 19432, true }, + { 19453, true }, + { 19463, true }, + { 19477, true }, + { 19490, true }, + { 19505, true }, + { 19526, true }, + { 19544, true }, + { 19556, true }, + { 19574, true }, + { 19592, true }, + { 19606, true }, + { 19625, false }, + { 19639, true }, + { 19649, true }, + { 19660, true }, + { 19670, true }, { 19683, true }, - { 19694, true }, - { 19704, true }, - { 19717, true }, - { 19732, true }, - { 19746, true }, - { 19759, true }, - { 19772, true }, - { 19789, true }, - { 19805, true }, - { 19815, true }, - { 19828, true }, - { 19845, true }, - { 19859, true }, + { 19698, true }, + { 19712, true }, + { 19725, true }, + { 19738, true }, + { 19755, true }, + { 19771, true }, + { 19781, true }, + { 19794, true }, + { 19811, true }, + { 19825, true }, + { 19843, true }, + { 19863, true }, { 19877, true }, - { 19897, true }, - { 19911, true }, - { 19927, true }, - { 19936, true }, - { 19944, true }, - { 19953, true }, - { 19962, true }, - { 19979, true }, - { 19992, true }, - { 20002, true }, - { 20012, true }, - { 20022, true }, - { 20040, true }, - { 20059, true }, - { 20083, true }, + { 19893, true }, + { 19902, true }, + { 19910, true }, + { 19919, true }, + { 19928, true }, + { 19945, true }, + { 19958, true }, + { 19968, true }, + { 19978, true }, + { 19988, true }, + { 20006, true }, + { 20025, true }, + { 20049, true }, + { 20064, true }, + { 20082, true }, { 20098, true }, { 20116, true }, - { 20132, true }, - { 20150, true }, - { 20162, true }, - { 20185, true }, - { 20207, true }, - { 20233, true }, - { 20251, true }, - { 20273, true }, - { 20287, true }, - { 20300, true }, - { 20314, true }, - { 20332, true }, - { 20347, true }, - { 20359, true }, - { 20381, true }, - { 20398, true }, - { 20413, true }, - { 20434, true }, - { 20448, true }, - { 20467, true }, - { 20488, true }, - { 20505, true }, - { 20519, true }, - { 20540, true }, - { 20553, true }, - { 20569, true }, - { 20582, true }, - { 20601, true }, - { 20618, true }, + { 20128, true }, + { 20151, true }, + { 20173, true }, + { 20199, true }, + { 20217, true }, + { 20239, true }, + { 20253, true }, + { 20266, true }, + { 20278, true }, + { 20290, true }, + { 20304, true }, + { 20322, true }, + { 20337, true }, + { 20349, true }, + { 20371, true }, + { 20386, true }, + { 20407, true }, + { 20421, true }, + { 20440, true }, + { 20461, true }, + { 20478, true }, + { 20492, true }, + { 20513, true }, + { 20526, true }, + { 20542, true }, + { 20555, true }, + { 20574, true }, + { 20591, true }, + { 20609, true }, + { 20627, true }, { 20636, true }, - { 20654, true }, - { 20663, true }, - { 20679, true }, - { 20695, true }, - { 20714, true }, - { 20732, true }, - { 20748, true }, - { 20762, true }, - { 20774, true }, - { 20785, true }, - { 20799, true }, - { 20809, true }, - { 20820, true }, - { 20829, false }, - { 20838, true }, - { 20852, true }, + { 20652, true }, + { 20668, true }, + { 20687, true }, + { 20705, true }, + { 20721, true }, + { 20735, true }, + { 20747, true }, + { 20758, true }, + { 20772, true }, + { 20782, true }, + { 20793, true }, + { 20802, false }, + { 20811, true }, + { 20825, true }, + { 20839, true }, + { 20851, true }, { 20866, true }, { 20878, true }, { 20893, true }, - { 20905, true }, - { 20920, true }, - { 20933, true }, - { 20944, true }, + { 20906, true }, + { 20917, true }, + { 20940, true }, + { 20952, true }, { 20967, true }, - { 20979, true }, - { 20994, true }, - { 21010, true }, - { 21019, true }, - { 21034, true }, - { 21050, true }, - { 21063, true }, - { 21078, true }, - { 21091, true }, - { 21101, true }, - { 21121, true }, - { 21134, true }, - { 21153, true }, - { 21163, true }, + { 20983, true }, + { 20992, true }, + { 21007, true }, + { 21023, true }, + { 21036, true }, + { 21051, true }, + { 21064, true }, + { 21074, true }, + { 21094, true }, + { 21107, true }, + { 21126, true }, + { 21136, true }, + { 21146, true }, + { 21158, true }, { 21173, true }, - { 21185, true }, - { 21200, true }, - { 21215, true }, - { 21230, true }, - { 21240, true }, - { 21255, true }, - { 21271, true }, - { 21290, true }, - { 21299, true }, - { 21328, true }, - { 21341, true }, - { 21361, true }, - { 21376, true }, - { 21389, true }, - { 21404, true }, - { 21419, true }, - { 21434, true }, - { 21444, true }, - { 21454, true }, - { 21469, true }, - { 21491, true }, - { 21506, true }, + { 21188, true }, + { 21203, true }, + { 21213, true }, + { 21228, true }, + { 21244, true }, + { 21263, true }, + { 21272, true }, + { 21301, true }, + { 21314, true }, + { 21334, true }, + { 21349, true }, + { 21362, true }, + { 21377, true }, + { 21392, true }, + { 21407, true }, + { 21417, true }, + { 21427, true }, + { 21442, true }, + { 21464, true }, + { 21479, true }, + { 21492, true }, { 21519, true }, - { 21546, true }, + { 21533, true }, + { 21545, true }, { 21560, true }, - { 21572, true }, - { 21587, true }, - { 21601, true }, - { 21611, true }, - { 21632, true }, - { 21649, true }, - { 21671, true }, - { 21689, false }, - { 21708, true }, + { 21574, true }, + { 21584, true }, + { 21605, true }, + { 21622, true }, + { 21644, true }, + { 21662, false }, + { 21681, true }, + { 21695, true }, + { 21707, true }, { 21722, true }, - { 21734, true }, - { 21749, true }, - { 21766, true }, - { 21781, true }, - { 21792, true }, - { 21802, true }, - { 21818, true }, - { 21836, true }, - { 21848, true }, - { 21860, true }, + { 21739, true }, + { 21754, true }, + { 21765, true }, + { 21775, true }, + { 21791, true }, + { 21809, true }, + { 21821, true }, + { 21833, true }, + { 21863, true }, + { 21877, false }, { 21890, true }, - { 21904, false }, - { 21917, true }, - { 21935, true }, - { 21948, true }, - { 21960, true }, - { 21983, true }, - { 22002, true }, - { 22015, true }, - { 22023, false }, - { 22034, true }, - { 22052, true }, - { 22076, true }, - { 22096, true }, - { 22108, true }, - { 22129, true }, - { 22140, true }, - { 22157, true }, - { 22175, true }, - { 22188, true }, - { 22204, true }, - { 22218, true }, - { 22235, true }, - { 22246, true }, - { 22255, true }, - { 22267, true }, - { 22278, true }, - { 22288, true }, - { 22302, true }, - { 22320, true }, - { 22333, true }, - { 22344, true }, - { 22358, true }, - { 22370, true }, - { 22381, true }, - { 22392, true }, - { 22405, true }, - { 22417, true }, - { 22428, true }, - { 22447, true }, - { 22463, true }, + { 21908, true }, + { 21921, true }, + { 21933, true }, + { 21956, true }, + { 21975, true }, + { 21988, true }, + { 21996, false }, + { 22007, true }, + { 22025, true }, + { 22049, true }, + { 22069, true }, + { 22081, true }, + { 22102, true }, + { 22113, true }, + { 22130, true }, + { 22148, true }, + { 22161, true }, + { 22177, true }, + { 22191, true }, + { 22208, true }, + { 22219, true }, + { 22228, true }, + { 22240, true }, + { 22251, true }, + { 22261, true }, + { 22275, true }, + { 22293, true }, + { 22306, true }, + { 22317, true }, + { 22331, true }, + { 22343, true }, + { 22354, true }, + { 22365, true }, + { 22378, true }, + { 22390, true }, + { 22401, true }, + { 22420, true }, + { 22436, true }, + { 22450, true }, + { 22462, true }, { 22477, true }, - { 22489, true }, - { 22504, true }, - { 22513, true }, + { 22486, true }, + { 22501, true }, + { 22515, true }, { 22528, true }, - { 22542, true }, - { 22555, true }, - { 22567, true }, - { 22579, true }, - { 22593, true }, - { 22604, true }, - { 22618, true }, - { 22629, true }, - { 22640, true }, - { 22650, true }, - { 22660, true }, - { 22673, true }, - { 22684, true }, - { 22695, true }, + { 22540, true }, + { 22552, true }, + { 22566, true }, + { 22577, true }, + { 22591, true }, + { 22602, true }, + { 22613, true }, + { 22623, true }, + { 22633, true }, + { 22646, true }, + { 22657, true }, + { 22668, true }, + { 22679, true }, + { 22692, true }, { 22706, true }, - { 22719, true }, - { 22733, true }, - { 22745, true }, - { 22759, true }, - { 22771, true }, - { 22784, true }, - { 22809, true }, - { 22826, true }, - { 22837, true }, - { 22848, true }, - { 22867, true }, - { 22883, true }, - { 22893, true }, + { 22718, true }, + { 22732, true }, + { 22744, true }, + { 22757, true }, + { 22782, true }, + { 22799, true }, + { 22810, true }, + { 22821, true }, + { 22840, true }, + { 22856, true }, + { 22866, true }, + { 22877, true }, + { 22889, true }, { 22904, true }, - { 22916, true }, - { 22931, true }, - { 22950, true }, - { 22967, true }, - { 22985, false }, - { 22993, true }, - { 23006, true }, - { 23018, true }, + { 22923, true }, + { 22940, true }, + { 22958, false }, + { 22966, true }, + { 22979, true }, + { 22991, true }, + { 23003, true }, + { 23017, true }, { 23030, true }, - { 23044, true }, - { 23057, true }, - { 23070, true }, - { 23086, true }, - { 23100, true }, - { 23117, true }, - { 23134, true }, - { 23147, true }, - { 23160, true }, - { 23173, true }, - { 23186, true }, - { 23199, true }, - { 23212, true }, - { 23225, true }, - { 23238, true }, - { 23251, true }, - { 23264, true }, - { 23277, true }, - { 23290, true }, - { 23303, true }, - { 23316, true }, - { 23333, true }, - { 23348, true }, - { 23361, true }, - { 23373, true }, - { 23395, true }, - { 23407, true }, - { 23430, true }, - { 23454, true }, - { 23472, true }, - { 23485, true }, - { 23504, true }, - { 23525, true }, - { 23538, true }, - { 23553, true }, - { 23571, true }, - { 23587, true }, - { 23603, true }, - { 23613, true }, - { 23627, true }, - { 23642, true }, - { 23661, true }, + { 23043, true }, + { 23059, true }, + { 23073, true }, + { 23090, true }, + { 23107, true }, + { 23120, true }, + { 23133, true }, + { 23146, true }, + { 23159, true }, + { 23172, true }, + { 23185, true }, + { 23198, true }, + { 23211, true }, + { 23224, true }, + { 23237, true }, + { 23250, true }, + { 23263, true }, + { 23276, true }, + { 23289, true }, + { 23306, true }, + { 23321, true }, + { 23334, true }, + { 23346, true }, + { 23368, true }, + { 23380, true }, + { 23403, true }, + { 23427, true }, + { 23445, true }, + { 23458, true }, + { 23477, true }, + { 23498, true }, + { 23511, true }, + { 23526, true }, + { 23544, true }, + { 23560, true }, + { 23576, true }, + { 23586, true }, + { 23600, true }, + { 23615, true }, + { 23634, true }, + { 23651, true }, + { 23662, true }, { 23678, true }, - { 23689, true }, - { 23705, true }, - { 23717, true }, - { 23727, true }, - { 23743, true }, - { 23753, true }, - { 23774, true }, - { 23796, true }, - { 23808, true }, - { 23819, true }, - { 23834, true }, - { 23845, true }, + { 23690, true }, + { 23700, true }, + { 23716, true }, + { 23726, true }, + { 23747, true }, + { 23769, true }, + { 23781, true }, + { 23792, true }, + { 23807, true }, + { 23818, true }, + { 23833, true }, + { 23848, true }, { 23860, true }, - { 23875, true }, - { 23887, true }, + { 23879, true }, + { 23892, true }, { 23906, true }, - { 23919, true }, - { 23933, true }, - { 23955, true }, - { 23974, true }, - { 23994, true }, + { 23928, true }, + { 23947, true }, + { 23967, true }, + { 23975, true }, + { 23988, true }, { 24002, true }, - { 24015, true }, - { 24029, true }, - { 24040, true }, - { 24053, true }, - { 24068, true }, - { 24084, true }, - { 24099, true }, - { 24113, true }, - { 24125, true }, - { 24142, false }, - { 24158, false }, - { 24178, true }, - { 24191, true }, - { 24207, true }, - { 24232, true }, - { 24245, true }, - { 24258, true }, - { 24269, true }, - { 24278, true }, - { 24287, true }, - { 24303, true }, + { 24013, true }, + { 24026, true }, + { 24041, true }, + { 24057, true }, + { 24072, true }, + { 24086, true }, + { 24098, true }, + { 24115, false }, + { 24131, false }, + { 24151, true }, + { 24164, true }, + { 24180, true }, + { 24205, true }, + { 24218, true }, + { 24231, true }, + { 24242, true }, + { 24251, true }, + { 24260, true }, + { 24276, true }, + { 24290, true }, + { 24306, true }, { 24317, true }, - { 24333, true }, - { 24344, true }, - { 24357, true }, - { 24372, true }, - { 24386, true }, - { 24398, true }, - { 24410, true }, - { 24434, true }, - { 24447, true }, - { 24460, true }, - { 24481, true }, - { 24501, true }, - { 24515, true }, - { 24530, true }, - { 24539, true }, - { 24550, true }, - { 24560, true }, - { 24570, true }, - { 24588, true }, - { 24613, true }, - { 24635, true }, - { 24648, true }, - { 24661, true }, + { 24330, true }, + { 24345, true }, + { 24359, true }, + { 24371, true }, + { 24383, true }, + { 24407, true }, + { 24420, true }, + { 24433, true }, + { 24454, true }, + { 24474, true }, + { 24488, true }, + { 24503, true }, + { 24512, true }, + { 24523, true }, + { 24533, true }, + { 24543, true }, + { 24561, true }, + { 24586, true }, + { 24608, true }, + { 24621, true }, + { 24634, true }, + { 24645, true }, + { 24653, true }, { 24672, true }, - { 24680, true }, - { 24699, true }, - { 24709, true }, - { 24722, true }, - { 24739, true }, - { 24756, true }, - { 24772, true }, - { 24784, true }, - { 24796, true }, - { 24807, true }, - { 24821, true }, - { 24845, true }, - { 24860, true }, - { 24875, true }, - { 24897, true }, + { 24682, true }, + { 24695, true }, + { 24712, true }, + { 24729, true }, + { 24745, true }, + { 24757, true }, + { 24769, true }, + { 24780, true }, + { 24794, true }, + { 24818, true }, + { 24833, true }, + { 24848, true }, + { 24870, true }, + { 24880, true }, + { 24896, true }, { 24907, true }, - { 24923, true }, - { 24934, true }, - { 24955, true }, - { 24968, true }, - { 24988, true }, - { 24999, true }, - { 25007, false }, - { 25019, true }, - { 25031, true }, - { 25050, true }, - { 25064, true }, - { 25079, true }, - { 25094, true }, - { 25109, true }, + { 24928, true }, + { 24941, true }, + { 24961, true }, + { 24972, true }, + { 24980, false }, + { 24992, true }, + { 25009, true }, + { 25021, true }, + { 25040, true }, + { 25054, true }, + { 25069, true }, + { 25084, true }, + { 25099, true }, + { 25114, true }, { 25124, true }, { 25134, true }, - { 25144, true }, - { 25156, false }, - { 25165, true }, - { 25179, true }, - { 25191, true }, - { 25217, true }, - { 25225, true }, - { 25240, true }, - { 25252, true }, - { 25264, true }, - { 25282, true }, - { 25302, true }, - { 25318, true }, - { 25330, true }, - { 25348, true }, - { 25360, true }, - { 25374, true }, - { 25394, true }, - { 25406, true }, - { 25420, true }, - { 25437, true }, + { 25146, false }, + { 25155, true }, + { 25169, true }, + { 25181, true }, + { 25207, true }, + { 25215, true }, + { 25230, true }, + { 25242, true }, + { 25254, true }, + { 25272, true }, + { 25292, true }, + { 25308, true }, + { 25320, true }, + { 25338, true }, + { 25350, true }, + { 25364, true }, + { 25384, true }, + { 25396, true }, + { 25410, true }, + { 25427, true }, + { 25436, true }, { 25446, true }, - { 25456, true }, - { 25468, true }, - { 25490, false }, - { 25504, true }, - { 25520, true }, - { 25537, true }, - { 25549, true }, - { 25567, false }, - { 25589, false }, - { 25614, false }, - { 25638, true }, + { 25458, true }, + { 25480, false }, + { 25494, true }, + { 25510, true }, + { 25527, true }, + { 25539, true }, + { 25557, false }, + { 25579, false }, + { 25604, false }, + { 25628, true }, + { 25640, true }, { 25650, true }, - { 25660, true }, + { 25663, true }, { 25673, true }, { 25683, true }, { 25693, true }, @@ -17768,14099 +17776,14109 @@ static const nsSTSPreload kSTSPreloadList[] = { { 25713, true }, { 25723, true }, { 25733, true }, - { 25743, true }, - { 25757, true }, - { 25775, true }, - { 25790, true }, - { 25804, true }, - { 25816, true }, - { 25828, true }, - { 25839, true }, - { 25853, true }, - { 25868, true }, - { 25882, true }, - { 25889, true }, - { 25903, false }, - { 25923, true }, - { 25944, true }, - { 25963, true }, - { 25978, true }, - { 25990, true }, - { 26015, true }, - { 26026, true }, - { 26037, true }, - { 26049, true }, - { 26062, false }, - { 26075, true }, - { 26092, true }, - { 26108, true }, - { 26121, true }, - { 26133, true }, + { 25747, true }, + { 25765, true }, + { 25780, true }, + { 25794, true }, + { 25806, true }, + { 25818, true }, + { 25829, true }, + { 25843, true }, + { 25858, true }, + { 25872, true }, + { 25879, true }, + { 25893, false }, + { 25913, true }, + { 25934, true }, + { 25953, true }, + { 25968, true }, + { 25980, true }, + { 26005, true }, + { 26016, true }, + { 26027, true }, + { 26039, true }, + { 26052, false }, + { 26065, true }, + { 26082, true }, + { 26098, true }, + { 26111, true }, + { 26123, true }, + { 26138, true }, { 26148, true }, - { 26158, true }, - { 26183, true }, - { 26199, true }, - { 26213, true }, - { 26230, true }, + { 26173, true }, + { 26189, true }, + { 26203, true }, + { 26220, true }, + { 26239, true }, { 26249, true }, - { 26259, true }, - { 26279, true }, - { 26291, true }, - { 26307, true }, - { 26335, false }, - { 26347, true }, - { 26360, true }, - { 26377, true }, - { 26394, true }, + { 26269, true }, + { 26281, true }, + { 26297, true }, + { 26325, false }, + { 26337, true }, + { 26350, true }, + { 26367, true }, + { 26384, true }, + { 26393, true }, { 26403, true }, - { 26413, true }, - { 26430, true }, - { 26439, true }, - { 26446, true }, - { 26461, true }, - { 26472, false }, - { 26488, true }, - { 26505, true }, + { 26420, true }, + { 26429, true }, + { 26436, true }, + { 26451, true }, + { 26462, false }, + { 26478, true }, + { 26495, true }, + { 26509, true }, { 26519, true }, { 26529, true }, - { 26539, true }, - { 26559, true }, - { 26579, true }, - { 26590, true }, - { 26608, true }, - { 26623, true }, - { 26636, true }, - { 26651, true }, - { 26667, true }, - { 26693, true }, - { 26710, true }, - { 26723, true }, - { 26731, true }, - { 26754, true }, - { 26768, true }, + { 26549, true }, + { 26569, true }, + { 26580, true }, + { 26598, true }, + { 26613, true }, + { 26626, true }, + { 26641, true }, + { 26657, true }, + { 26683, true }, + { 26700, true }, + { 26713, true }, + { 26721, true }, + { 26744, true }, + { 26758, true }, + { 26770, true }, { 26780, true }, - { 26790, true }, - { 26815, true }, - { 26832, false }, - { 26853, false }, - { 26875, false }, - { 26894, false }, - { 26912, true }, - { 26928, true }, - { 26956, true }, - { 26967, true }, - { 26982, true }, - { 27001, true }, - { 27024, true }, - { 27048, true }, - { 27062, true }, - { 27073, true }, - { 27095, true }, - { 27113, true }, - { 27128, true }, - { 27143, true }, - { 27156, true }, - { 27169, true }, - { 27184, true }, - { 27199, true }, - { 27214, true }, - { 27241, true }, - { 27253, true }, - { 27268, true }, - { 27287, true }, - { 27305, true }, - { 27313, true }, - { 27321, true }, - { 27333, true }, - { 27345, true }, - { 27359, true }, - { 27377, true }, - { 27395, true }, - { 27410, true }, - { 27425, true }, - { 27441, true }, - { 27458, true }, - { 27467, true }, - { 27478, true }, + { 26805, true }, + { 26822, false }, + { 26843, false }, + { 26865, false }, + { 26884, false }, + { 26902, true }, + { 26918, true }, + { 26946, true }, + { 26957, true }, + { 26972, true }, + { 26991, true }, + { 27014, true }, + { 27038, true }, + { 27052, true }, + { 27063, true }, + { 27085, true }, + { 27103, true }, + { 27118, true }, + { 27133, true }, + { 27146, true }, + { 27159, true }, + { 27174, true }, + { 27189, true }, + { 27204, true }, + { 27231, true }, + { 27243, true }, + { 27258, true }, + { 27277, true }, + { 27295, true }, + { 27303, true }, + { 27311, true }, + { 27323, true }, + { 27335, true }, + { 27349, true }, + { 27367, true }, + { 27385, true }, + { 27400, true }, + { 27415, true }, + { 27431, true }, + { 27448, true }, + { 27457, true }, + { 27468, true }, + { 27481, true }, { 27491, true }, - { 27501, true }, - { 27514, false }, - { 27528, true }, + { 27504, false }, + { 27518, true }, + { 27530, true }, { 27540, true }, - { 27550, true }, - { 27566, false }, + { 27556, false }, + { 27563, true }, { 27573, true }, - { 27583, true }, - { 27597, true }, - { 27612, true }, - { 27620, true }, - { 27633, true }, + { 27587, true }, + { 27602, true }, + { 27610, true }, + { 27623, true }, + { 27631, true }, { 27641, true }, - { 27651, true }, - { 27669, true }, - { 27687, true }, - { 27698, true }, - { 27711, true }, - { 27724, true }, - { 27738, true }, - { 27747, true }, - { 27762, true }, - { 27791, true }, - { 27808, true }, + { 27659, true }, + { 27677, true }, + { 27688, true }, + { 27701, true }, + { 27714, true }, + { 27728, true }, + { 27737, true }, + { 27752, true }, + { 27781, true }, + { 27798, true }, + { 27816, true }, { 27826, true }, - { 27836, true }, - { 27850, true }, - { 27861, true }, - { 27888, true }, - { 27908, true }, - { 27925, true }, - { 27939, true }, - { 27961, true }, - { 27986, true }, - { 27999, true }, - { 28012, true }, - { 28029, true }, - { 28047, true }, - { 28062, true }, - { 28077, true }, + { 27840, true }, + { 27851, true }, + { 27878, true }, + { 27898, true }, + { 27915, true }, + { 27929, true }, + { 27951, true }, + { 27976, true }, + { 27989, true }, + { 28002, true }, + { 28019, true }, + { 28037, true }, + { 28052, true }, + { 28067, true }, + { 28078, true }, { 28088, true }, - { 28098, true }, - { 28119, true }, - { 28129, false }, - { 28148, true }, - { 28160, true }, - { 28189, true }, - { 28207, true }, - { 28225, true }, - { 28243, true }, - { 28264, true }, - { 28278, true }, - { 28292, true }, + { 28109, true }, + { 28119, false }, + { 28138, true }, + { 28150, true }, + { 28179, true }, + { 28197, true }, + { 28215, true }, + { 28233, true }, + { 28254, true }, + { 28268, true }, + { 28282, true }, + { 28290, true }, { 28300, true }, - { 28310, true }, - { 28323, true }, - { 28335, true }, - { 28347, true }, - { 28363, true }, - { 28377, true }, - { 28399, true }, - { 28418, true }, - { 28431, true }, - { 28444, true }, - { 28463, true }, - { 28478, true }, + { 28313, true }, + { 28325, true }, + { 28337, true }, + { 28353, true }, + { 28367, true }, + { 28389, true }, + { 28408, true }, + { 28421, true }, + { 28434, true }, + { 28453, true }, + { 28468, true }, + { 28486, false }, { 28496, true }, - { 28509, false }, - { 28519, true }, - { 28541, true }, + { 28518, true }, + { 28532, true }, { 28555, true }, - { 28578, true }, - { 28594, true }, - { 28609, true }, - { 28625, true }, - { 28642, true }, - { 28653, false }, - { 28661, true }, - { 28677, true }, - { 28697, true }, + { 28571, true }, + { 28586, true }, + { 28602, true }, + { 28619, true }, + { 28630, false }, + { 28638, true }, + { 28654, true }, + { 28674, true }, + { 28688, true }, + { 28703, true }, { 28711, true }, { 28726, true }, - { 28734, true }, - { 28749, true }, - { 28762, true }, - { 28774, true }, - { 28787, true }, - { 28800, false }, - { 28822, true }, + { 28739, true }, + { 28751, true }, + { 28764, true }, + { 28777, false }, + { 28799, true }, + { 28823, true }, { 28846, true }, - { 28869, true }, - { 28887, true }, - { 28902, true }, - { 28929, true }, - { 28955, true }, - { 28982, true }, - { 28998, true }, - { 29016, true }, - { 29045, true }, - { 29061, true }, - { 29073, true }, - { 29086, true }, - { 29097, true }, - { 29115, true }, - { 29128, true }, - { 29137, true }, - { 29146, true }, - { 29163, true }, - { 29176, true }, - { 29185, true }, - { 29202, true }, - { 29210, true }, - { 29219, true }, - { 29228, false }, - { 29239, true }, - { 29263, true }, - { 29273, true }, - { 29283, true }, - { 29292, true }, - { 29305, true }, - { 29318, true }, - { 29330, true }, - { 29344, true }, - { 29358, true }, - { 29376, true }, - { 29391, true }, - { 29405, true }, - { 29417, true }, - { 29433, true }, - { 29446, true }, - { 29461, true }, - { 29473, true }, + { 28864, true }, + { 28879, true }, + { 28906, true }, + { 28932, true }, + { 28959, true }, + { 28975, true }, + { 28993, true }, + { 29022, true }, + { 29038, true }, + { 29050, true }, + { 29063, true }, + { 29074, true }, + { 29092, true }, + { 29105, true }, + { 29114, true }, + { 29123, true }, + { 29140, true }, + { 29153, true }, + { 29162, true }, + { 29179, true }, + { 29187, true }, + { 29196, true }, + { 29205, false }, + { 29216, true }, + { 29240, true }, + { 29250, true }, + { 29260, true }, + { 29269, true }, + { 29282, true }, + { 29295, true }, + { 29307, true }, + { 29321, true }, + { 29335, true }, + { 29353, true }, + { 29368, true }, + { 29382, true }, + { 29394, true }, + { 29410, true }, + { 29423, true }, + { 29438, true }, + { 29450, true }, + { 29465, true }, + { 29479, true }, { 29488, true }, - { 29502, true }, + { 29497, true }, { 29511, true }, { 29520, true }, { 29534, true }, - { 29543, true }, + { 29544, true }, { 29557, true }, { 29567, true }, - { 29580, true }, - { 29590, true }, - { 29600, true }, - { 29615, true }, - { 29630, true }, - { 29644, true }, - { 29659, true }, - { 29678, true }, - { 29694, true }, - { 29708, true }, - { 29724, true }, - { 29735, true }, - { 29749, true }, - { 29759, true }, - { 29770, true }, - { 29786, true }, - { 29798, true }, - { 29814, true }, - { 29828, true }, + { 29577, true }, + { 29592, true }, + { 29607, true }, + { 29621, true }, + { 29636, true }, + { 29655, true }, + { 29671, true }, + { 29685, true }, + { 29701, true }, + { 29712, true }, + { 29726, true }, + { 29736, true }, + { 29747, true }, + { 29763, true }, + { 29775, true }, + { 29791, true }, + { 29805, true }, + { 29810, true }, + { 29818, true }, + { 29826, true }, { 29833, true }, - { 29844, true }, - { 29852, true }, - { 29860, true }, - { 29867, true }, - { 29873, true }, - { 29883, true }, - { 29892, true }, - { 29902, true }, - { 29931, true }, - { 29946, false }, - { 29966, true }, - { 29976, true }, - { 29989, true }, - { 30007, true }, - { 30020, true }, - { 30040, true }, - { 30056, true }, - { 30068, true }, - { 30080, true }, - { 30093, true }, - { 30104, true }, - { 30115, true }, - { 30129, true }, - { 30147, true }, - { 30160, true }, - { 30173, true }, - { 30189, true }, - { 30209, true }, - { 30229, true }, - { 30237, true }, - { 30248, false }, - { 30258, true }, - { 30270, true }, - { 30279, true }, - { 30293, true }, - { 30312, true }, - { 30320, true }, - { 30344, true }, - { 30363, true }, - { 30377, false }, - { 30393, true }, - { 30404, true }, - { 30416, false }, - { 30431, true }, - { 30443, true }, - { 30462, true }, - { 30474, true }, - { 30488, true }, - { 30500, true }, - { 30511, true }, - { 30525, true }, - { 30538, true }, - { 30550, true }, - { 30563, true }, - { 30583, true }, - { 30593, true }, - { 30612, true }, - { 30624, true }, - { 30635, true }, - { 30647, true }, - { 30664, true }, + { 29839, true }, + { 29849, true }, + { 29858, true }, + { 29868, true }, + { 29897, true }, + { 29912, false }, + { 29932, true }, + { 29942, true }, + { 29955, true }, + { 29973, true }, + { 29986, true }, + { 30006, true }, + { 30022, true }, + { 30034, true }, + { 30046, true }, + { 30059, true }, + { 30070, true }, + { 30081, true }, + { 30095, true }, + { 30113, true }, + { 30126, true }, + { 30139, true }, + { 30155, true }, + { 30175, true }, + { 30195, true }, + { 30203, true }, + { 30214, false }, + { 30224, true }, + { 30236, true }, + { 30245, true }, + { 30259, true }, + { 30278, true }, + { 30286, true }, + { 30310, true }, + { 30329, true }, + { 30343, false }, + { 30359, true }, + { 30370, true }, + { 30382, false }, + { 30397, true }, + { 30409, true }, + { 30428, true }, + { 30440, true }, + { 30454, true }, + { 30466, true }, + { 30477, true }, + { 30491, true }, + { 30504, true }, + { 30516, true }, + { 30529, true }, + { 30549, true }, + { 30559, true }, + { 30578, true }, + { 30590, true }, + { 30601, true }, + { 30613, true }, + { 30630, true }, + { 30653, true }, + { 30676, true }, { 30687, true }, - { 30710, true }, - { 30721, true }, - { 30733, true }, - { 30748, true }, - { 30759, true }, - { 30775, true }, - { 30791, true }, - { 30809, false }, + { 30699, true }, + { 30714, true }, + { 30725, true }, + { 30741, true }, + { 30757, true }, + { 30775, false }, + { 30798, true }, + { 30818, true }, { 30832, true }, - { 30852, true }, - { 30866, true }, - { 30881, true }, + { 30847, true }, + { 30870, true }, + { 30889, true }, { 30904, true }, - { 30923, true }, - { 30938, true }, - { 30956, true }, - { 30973, true }, - { 30999, true }, - { 31018, true }, - { 31034, true }, - { 31048, true }, - { 31069, true }, - { 31085, true }, - { 31110, true }, - { 31124, true }, - { 31142, true }, - { 31151, true }, - { 31163, false }, - { 31174, true }, - { 31187, true }, - { 31199, true }, - { 31222, true }, - { 31234, true }, - { 31249, true }, - { 31262, true }, - { 31276, true }, - { 31286, true }, - { 31299, true }, - { 31307, true }, - { 31314, true }, - { 31339, true }, - { 31365, true }, - { 31377, true }, - { 31389, true }, - { 31404, true }, - { 31430, true }, - { 31452, true }, - { 31466, true }, - { 31478, true }, - { 31488, true }, - { 31501, true }, - { 31509, true }, - { 31523, true }, - { 31547, true }, - { 31561, true }, - { 31585, true }, - { 31596, true }, - { 31613, true }, - { 31622, true }, - { 31637, true }, - { 31659, true }, - { 31682, true }, - { 31706, true }, - { 31729, true }, - { 31742, true }, - { 31760, false }, - { 31791, false }, - { 31806, true }, - { 31818, true }, - { 31831, true }, - { 31846, true }, - { 31862, true }, - { 31873, true }, - { 31889, true }, - { 31900, true }, - { 31914, true }, - { 31924, false }, - { 31937, true }, - { 31954, true }, - { 31973, true }, - { 31987, true }, - { 32001, true }, - { 32013, true }, - { 32032, true }, + { 30922, true }, + { 30939, true }, + { 30965, true }, + { 30984, true }, + { 31000, true }, + { 31014, true }, + { 31035, true }, + { 31051, true }, + { 31076, true }, + { 31090, true }, + { 31108, true }, + { 31117, true }, + { 31129, false }, + { 31140, true }, + { 31153, true }, + { 31165, true }, + { 31188, true }, + { 31200, true }, + { 31215, true }, + { 31228, true }, + { 31242, true }, + { 31252, true }, + { 31265, true }, + { 31273, true }, + { 31280, true }, + { 31305, true }, + { 31331, true }, + { 31343, true }, + { 31355, true }, + { 31370, true }, + { 31396, true }, + { 31418, true }, + { 31432, true }, + { 31444, true }, + { 31454, true }, + { 31467, true }, + { 31475, true }, + { 31489, true }, + { 31513, true }, + { 31527, true }, + { 31551, true }, + { 31562, true }, + { 31579, true }, + { 31588, true }, + { 31603, true }, + { 31625, true }, + { 31648, true }, + { 31672, true }, + { 31695, true }, + { 31708, true }, + { 31726, false }, + { 31757, false }, + { 31772, true }, + { 31785, true }, + { 31800, true }, + { 31816, true }, + { 31827, true }, + { 31843, true }, + { 31854, true }, + { 31868, true }, + { 31878, false }, + { 31891, true }, + { 31908, true }, + { 31927, true }, + { 31941, true }, + { 31955, true }, + { 31967, true }, + { 31986, true }, + { 31999, true }, + { 32016, true }, + { 32025, true }, { 32045, true }, - { 32062, true }, - { 32071, true }, - { 32091, true }, - { 32113, true }, + { 32067, true }, + { 32080, true }, + { 32101, true }, + { 32112, true }, { 32126, true }, - { 32147, true }, - { 32158, true }, - { 32172, true }, - { 32188, true }, - { 32199, true }, - { 32215, true }, - { 32232, true }, - { 32241, true }, - { 32256, true }, - { 32270, true }, + { 32142, true }, + { 32153, true }, + { 32169, true }, + { 32186, true }, + { 32195, true }, + { 32210, true }, + { 32224, true }, + { 32245, true }, + { 32262, true }, + { 32278, true }, { 32291, true }, - { 32308, true }, + { 32304, true }, + { 32316, true }, { 32324, true }, { 32337, true }, { 32350, true }, { 32362, true }, - { 32370, true }, - { 32383, true }, + { 32381, true }, { 32396, true }, - { 32408, true }, - { 32427, true }, - { 32442, true }, - { 32458, true }, - { 32479, true }, - { 32497, true }, - { 32508, true }, - { 32516, false }, - { 32539, true }, - { 32556, true }, - { 32573, true }, - { 32586, true }, - { 32603, true }, - { 32614, true }, - { 32626, false }, - { 32636, true }, - { 32652, false }, - { 32663, true }, - { 32678, true }, - { 32687, true }, - { 32700, true }, - { 32734, true }, - { 32752, true }, - { 32770, true }, - { 32781, true }, - { 32791, true }, - { 32802, true }, - { 32814, true }, - { 32840, true }, - { 32857, true }, - { 32866, true }, - { 32882, true }, - { 32892, true }, - { 32900, false }, - { 32908, true }, - { 32918, true }, - { 32931, true }, - { 32941, true }, + { 32412, true }, + { 32433, true }, + { 32451, true }, + { 32462, true }, + { 32470, false }, + { 32493, true }, + { 32510, true }, + { 32527, true }, + { 32540, true }, + { 32557, true }, + { 32568, true }, + { 32580, false }, + { 32590, true }, + { 32606, false }, + { 32617, true }, + { 32632, true }, + { 32641, true }, + { 32654, true }, + { 32688, true }, + { 32706, true }, + { 32724, true }, + { 32735, true }, + { 32745, true }, + { 32756, true }, + { 32768, true }, + { 32794, true }, + { 32811, true }, + { 32820, true }, + { 32836, true }, + { 32846, true }, + { 32854, false }, + { 32862, true }, + { 32872, true }, + { 32885, true }, + { 32895, true }, + { 32910, true }, + { 32924, true }, + { 32938, true }, + { 32948, true }, { 32956, true }, { 32970, true }, - { 32984, true }, - { 32994, true }, - { 33002, true }, - { 33016, true }, - { 33037, true }, - { 33051, true }, - { 33067, true }, - { 33074, true }, - { 33084, true }, - { 33099, false }, - { 33109, true }, - { 33120, false }, - { 33133, true }, - { 33149, true }, - { 33167, true }, - { 33183, true }, - { 33194, true }, - { 33212, true }, - { 33234, false }, - { 33251, true }, - { 33263, true }, - { 33279, true }, - { 33295, true }, - { 33311, true }, - { 33330, true }, - { 33347, true }, - { 33362, true }, - { 33381, true }, - { 33396, true }, - { 33411, true }, - { 33432, true }, - { 33450, true }, + { 32991, true }, + { 33005, true }, + { 33021, true }, + { 33028, true }, + { 33038, true }, + { 33053, false }, + { 33063, true }, + { 33074, false }, + { 33087, true }, + { 33103, true }, + { 33121, true }, + { 33137, true }, + { 33148, true }, + { 33166, true }, + { 33188, false }, + { 33205, true }, + { 33217, true }, + { 33233, true }, + { 33249, true }, + { 33265, true }, + { 33284, true }, + { 33301, true }, + { 33316, true }, + { 33335, true }, + { 33350, true }, + { 33365, true }, + { 33386, true }, + { 33404, true }, + { 33417, true }, + { 33430, true }, + { 33444, true }, { 33463, true }, - { 33476, true }, - { 33490, true }, - { 33509, true }, - { 33527, true }, - { 33542, true }, - { 33556, true }, - { 33569, true }, - { 33580, true }, - { 33590, true }, - { 33607, true }, - { 33623, true }, - { 33639, true }, - { 33654, true }, - { 33664, true }, - { 33679, true }, - { 33691, true }, - { 33702, true }, - { 33714, false }, - { 33722, true }, - { 33743, true }, - { 33751, true }, - { 33762, true }, - { 33775, true }, - { 33783, true }, + { 33481, true }, + { 33496, true }, + { 33510, true }, + { 33523, true }, + { 33534, true }, + { 33544, true }, + { 33561, true }, + { 33577, true }, + { 33593, true }, + { 33608, true }, + { 33618, true }, + { 33633, true }, + { 33645, true }, + { 33656, true }, + { 33668, false }, + { 33676, true }, + { 33697, true }, + { 33705, true }, + { 33716, true }, + { 33729, true }, + { 33737, true }, + { 33745, true }, + { 33763, true }, + { 33777, true }, { 33791, true }, - { 33809, true }, - { 33823, true }, - { 33837, true }, - { 33845, true }, - { 33853, true }, - { 33863, true }, - { 33877, true }, - { 33897, true }, - { 33905, true }, - { 33914, false }, - { 33934, true }, - { 33952, true }, - { 33963, true }, - { 33981, true }, - { 33999, true }, - { 34019, true }, - { 34031, true }, - { 34043, true }, - { 34059, true }, - { 34073, true }, - { 34090, true }, - { 34103, true }, - { 34120, true }, - { 34133, true }, + { 33799, true }, + { 33807, true }, + { 33817, true }, + { 33831, true }, + { 33851, true }, + { 33859, true }, + { 33868, false }, + { 33888, true }, + { 33906, true }, + { 33917, true }, + { 33935, true }, + { 33953, true }, + { 33973, true }, + { 33985, true }, + { 33997, true }, + { 34013, true }, + { 34027, true }, + { 34044, true }, + { 34057, true }, + { 34074, true }, + { 34087, true }, + { 34101, true }, + { 34114, true }, + { 34128, true }, { 34147, true }, - { 34160, true }, - { 34174, true }, - { 34193, true }, - { 34203, true }, + { 34157, true }, + { 34177, true }, + { 34186, true }, + { 34206, true }, { 34223, true }, - { 34232, true }, - { 34252, true }, - { 34269, true }, - { 34289, true }, - { 34303, true }, - { 34323, true }, - { 34341, true }, - { 34376, true }, - { 34390, true }, - { 34408, true }, - { 34418, true }, - { 34448, true }, - { 34463, true }, - { 34476, true }, - { 34489, true }, - { 34503, true }, - { 34518, true }, - { 34538, true }, - { 34555, true }, - { 34566, true }, - { 34576, false }, - { 34587, true }, - { 34595, true }, - { 34616, true }, - { 34637, true }, - { 34658, false }, - { 34674, true }, - { 34687, true }, - { 34702, true }, - { 34714, false }, - { 34735, true }, - { 34755, true }, - { 34777, true }, - { 34791, true }, - { 34809, true }, + { 34243, true }, + { 34257, true }, + { 34277, true }, + { 34295, true }, + { 34330, true }, + { 34344, true }, + { 34362, true }, + { 34372, true }, + { 34402, true }, + { 34417, true }, + { 34430, true }, + { 34443, true }, + { 34457, true }, + { 34472, true }, + { 34492, true }, + { 34509, true }, + { 34520, true }, + { 34530, false }, + { 34541, true }, + { 34549, true }, + { 34570, true }, + { 34591, true }, + { 34612, false }, + { 34628, true }, + { 34641, true }, + { 34656, true }, + { 34668, false }, + { 34689, true }, + { 34709, true }, + { 34731, true }, + { 34745, true }, + { 34763, true }, + { 34783, true }, + { 34799, true }, + { 34813, true }, { 34829, true }, - { 34845, true }, - { 34859, true }, - { 34875, true }, - { 34893, true }, - { 34904, true }, - { 34915, true }, - { 34928, true }, - { 34941, true }, - { 34956, true }, - { 34975, true }, - { 34991, true }, - { 35003, true }, - { 35013, true }, - { 35024, false }, - { 35046, true }, + { 34847, true }, + { 34858, true }, + { 34869, true }, + { 34882, true }, + { 34895, true }, + { 34909, true }, + { 34924, true }, + { 34943, true }, + { 34959, true }, + { 34971, true }, + { 34981, true }, + { 34992, false }, + { 35014, true }, + { 35022, true }, + { 35037, true }, { 35054, true }, - { 35069, true }, - { 35086, true }, + { 35068, true }, + { 35085, true }, { 35100, true }, - { 35117, true }, - { 35132, true }, - { 35150, true }, - { 35161, true }, + { 35118, true }, + { 35129, true }, + { 35153, true }, + { 35169, true }, { 35185, true }, - { 35201, true }, - { 35217, true }, - { 35232, true }, - { 35253, true }, - { 35262, true }, - { 35277, true }, - { 35290, false }, - { 35300, true }, - { 35319, true }, - { 35333, true }, - { 35353, true }, - { 35368, true }, - { 35377, true }, - { 35395, false }, - { 35417, true }, - { 35426, true }, - { 35445, true }, - { 35457, false }, - { 35473, false }, - { 35487, true }, - { 35503, true }, - { 35522, true }, - { 35534, true }, - { 35549, true }, - { 35564, true }, - { 35576, true }, - { 35594, true }, - { 35614, true }, - { 35636, true }, + { 35200, true }, + { 35221, true }, + { 35230, true }, + { 35245, true }, + { 35258, false }, + { 35268, true }, + { 35287, true }, + { 35301, true }, + { 35321, true }, + { 35336, true }, + { 35345, true }, + { 35363, false }, + { 35385, true }, + { 35394, true }, + { 35413, true }, + { 35425, false }, + { 35441, false }, + { 35455, true }, + { 35471, true }, + { 35490, true }, + { 35502, true }, + { 35517, true }, + { 35532, true }, + { 35544, true }, + { 35562, true }, + { 35582, true }, + { 35604, true }, + { 35622, true }, + { 35639, true }, { 35654, true }, - { 35671, true }, - { 35686, true }, - { 35701, true }, - { 35718, false }, - { 35734, true }, - { 35748, true }, - { 35762, true }, - { 35781, true }, - { 35798, true }, - { 35817, true }, - { 35832, true }, - { 35859, true }, - { 35879, true }, - { 35901, true }, - { 35922, true }, - { 35945, true }, - { 35965, true }, - { 35983, true }, - { 36001, true }, - { 36020, true }, - { 36042, true }, - { 36061, true }, - { 36081, true }, - { 36104, true }, - { 36127, true }, - { 36141, true }, - { 36158, true }, - { 36172, true }, - { 36186, true }, - { 36199, true }, - { 36236, false }, - { 36247, true }, - { 36265, true }, - { 36285, true }, - { 36308, true }, - { 36333, false }, - { 36364, true }, - { 36378, true }, - { 36389, true }, - { 36401, true }, - { 36413, true }, - { 36422, true }, - { 36434, true }, - { 36451, true }, - { 36461, true }, - { 36479, false }, - { 36487, true }, - { 36498, true }, - { 36512, true }, - { 36531, true }, - { 36542, false }, - { 36560, true }, - { 36573, true }, - { 36586, true }, - { 36603, true }, - { 36617, true }, - { 36628, true }, - { 36642, true }, - { 36654, true }, - { 36669, true }, - { 36677, true }, - { 36691, true }, - { 36703, true }, + { 35669, true }, + { 35686, false }, + { 35702, true }, + { 35716, true }, + { 35730, true }, + { 35749, true }, + { 35766, true }, + { 35785, true }, + { 35800, true }, + { 35827, true }, + { 35847, true }, + { 35869, true }, + { 35890, true }, + { 35913, true }, + { 35933, true }, + { 35951, true }, + { 35969, true }, + { 35988, true }, + { 36010, true }, + { 36029, true }, + { 36049, true }, + { 36072, true }, + { 36095, true }, + { 36109, true }, + { 36126, true }, + { 36140, true }, + { 36154, true }, + { 36167, true }, + { 36204, false }, + { 36215, true }, + { 36233, true }, + { 36253, true }, + { 36276, true }, + { 36301, false }, + { 36332, true }, + { 36346, true }, + { 36357, true }, + { 36369, true }, + { 36381, true }, + { 36390, true }, + { 36402, true }, + { 36419, true }, + { 36429, true }, + { 36447, false }, + { 36455, true }, + { 36466, true }, + { 36480, true }, + { 36499, true }, + { 36510, false }, + { 36528, true }, + { 36541, true }, + { 36554, true }, + { 36571, true }, + { 36585, true }, + { 36596, true }, + { 36610, true }, + { 36622, true }, + { 36637, true }, + { 36645, true }, + { 36659, true }, + { 36671, true }, + { 36683, true }, + { 36693, true }, + { 36704, true }, { 36715, true }, - { 36725, true }, - { 36736, true }, - { 36747, true }, - { 36761, true }, - { 36784, true }, - { 36792, true }, - { 36810, true }, - { 36825, true }, - { 36844, false }, - { 36863, true }, - { 36875, true }, - { 36891, true }, + { 36729, true }, + { 36752, true }, + { 36760, true }, + { 36778, true }, + { 36793, true }, + { 36812, false }, + { 36831, true }, + { 36843, true }, + { 36859, true }, + { 36869, true }, + { 36888, true }, { 36901, true }, - { 36920, true }, - { 36933, true }, - { 36948, true }, - { 36956, true }, - { 36971, true }, - { 36983, true }, - { 36991, true }, - { 36997, true }, - { 37010, true }, - { 37019, true }, - { 37033, true }, - { 37047, true }, - { 37060, false }, - { 37080, true }, - { 37096, true }, - { 37107, true }, - { 37119, true }, - { 37135, true }, - { 37148, true }, - { 37168, true }, - { 37182, true }, - { 37198, true }, - { 37212, true }, - { 37232, true }, - { 37246, true }, - { 37261, true }, - { 37281, true }, + { 36916, true }, + { 36924, true }, + { 36939, true }, + { 36951, true }, + { 36959, true }, + { 36965, true }, + { 36978, true }, + { 36987, true }, + { 37001, true }, + { 37015, true }, + { 37028, false }, + { 37048, true }, + { 37064, true }, + { 37075, true }, + { 37087, true }, + { 37103, true }, + { 37116, true }, + { 37136, true }, + { 37150, true }, + { 37166, true }, + { 37180, true }, + { 37200, true }, + { 37214, true }, + { 37229, true }, + { 37249, true }, + { 37263, true }, + { 37276, true }, + { 37285, true }, { 37295, true }, - { 37308, true }, - { 37317, true }, + { 37311, true }, { 37333, true }, - { 37355, true }, - { 37387, true }, - { 37403, true }, - { 37424, true }, - { 37444, true }, - { 37457, true }, - { 37477, true }, - { 37491, true }, - { 37510, true }, - { 37529, true }, - { 37544, true }, - { 37557, true }, - { 37567, true }, - { 37580, true }, - { 37595, true }, - { 37607, true }, - { 37622, true }, - { 37645, true }, - { 37661, true }, - { 37680, true }, - { 37692, false }, + { 37365, true }, + { 37381, true }, + { 37402, true }, + { 37422, true }, + { 37435, true }, + { 37455, true }, + { 37469, true }, + { 37488, true }, + { 37507, true }, + { 37522, true }, + { 37535, true }, + { 37545, true }, + { 37558, true }, + { 37573, true }, + { 37585, true }, + { 37600, true }, + { 37623, true }, + { 37639, true }, + { 37658, true }, + { 37670, false }, + { 37691, true }, + { 37700, true }, { 37713, true }, - { 37722, true }, - { 37735, true }, - { 37749, true }, - { 37758, true }, - { 37770, true }, - { 37786, true }, - { 37803, false }, - { 37813, true }, - { 37824, true }, - { 37836, true }, - { 37849, true }, - { 37868, true }, - { 37886, true }, - { 37903, true }, - { 37920, false }, - { 37930, true }, - { 37948, true }, - { 37967, true }, - { 37981, true }, + { 37727, true }, + { 37736, true }, + { 37748, true }, + { 37764, true }, + { 37781, false }, + { 37791, true }, + { 37802, true }, + { 37814, true }, + { 37827, true }, + { 37846, true }, + { 37864, true }, + { 37881, true }, + { 37898, false }, + { 37908, true }, + { 37926, true }, + { 37945, true }, + { 37959, true }, + { 37976, true }, { 37998, true }, - { 38020, true }, - { 38032, true }, - { 38053, true }, - { 38070, true }, - { 38092, true }, - { 38108, true }, - { 38123, true }, - { 38137, true }, - { 38163, true }, - { 38188, true }, - { 38203, true }, - { 38216, true }, - { 38228, true }, - { 38238, true }, - { 38253, true }, + { 38010, true }, + { 38023, true }, + { 38044, true }, + { 38061, true }, + { 38083, true }, + { 38099, true }, + { 38114, true }, + { 38128, true }, + { 38154, true }, + { 38179, true }, + { 38194, true }, + { 38207, true }, + { 38219, true }, + { 38229, true }, + { 38244, true }, + { 38254, true }, { 38263, true }, - { 38272, true }, - { 38286, true }, - { 38297, true }, - { 38308, true }, - { 38323, true }, - { 38338, true }, - { 38350, true }, - { 38364, true }, - { 38377, true }, - { 38388, true }, - { 38404, true }, + { 38277, true }, + { 38288, true }, + { 38299, true }, + { 38314, true }, + { 38329, true }, + { 38341, true }, + { 38355, true }, + { 38368, true }, + { 38379, true }, + { 38395, true }, + { 38405, true }, { 38414, true }, - { 38423, true }, - { 38435, true }, + { 38426, true }, + { 38437, true }, { 38446, true }, - { 38455, true }, - { 38471, true }, - { 38479, true }, - { 38489, true }, - { 38500, true }, - { 38511, false }, - { 38531, true }, - { 38555, true }, - { 38576, true }, - { 38584, true }, - { 38605, true }, - { 38615, true }, - { 38631, true }, + { 38462, true }, + { 38470, true }, + { 38480, true }, + { 38491, false }, + { 38511, true }, + { 38535, true }, + { 38556, true }, + { 38564, true }, + { 38585, true }, + { 38595, true }, + { 38611, true }, + { 38625, true }, { 38645, true }, - { 38665, true }, - { 38677, false }, - { 38687, true }, - { 38717, true }, - { 38744, false }, - { 38758, true }, - { 38771, true }, - { 38790, true }, - { 38807, true }, - { 38821, false }, - { 38839, true }, - { 38847, true }, - { 38863, true }, - { 38874, true }, - { 38889, true }, - { 38902, true }, - { 38915, true }, - { 38930, true }, - { 38950, false }, - { 38965, true }, - { 38977, true }, - { 38989, true }, - { 39001, true }, - { 39014, true }, - { 39029, true }, - { 39042, true }, - { 39055, false }, - { 39078, false }, - { 39102, true }, - { 39119, true }, - { 39132, true }, - { 39143, true }, - { 39155, true }, - { 39167, true }, - { 39181, true }, - { 39199, true }, - { 39210, true }, - { 39229, true }, - { 39246, true }, - { 39268, true }, - { 39287, true }, - { 39297, true }, - { 39311, true }, - { 39344, true }, - { 39365, true }, - { 39377, true }, - { 39392, true }, - { 39406, true }, - { 39417, true }, - { 39431, true }, - { 39444, true }, - { 39460, true }, - { 39473, true }, - { 39493, true }, - { 39501, true }, - { 39513, false }, - { 39525, true }, - { 39536, true }, - { 39553, true }, - { 39575, true }, - { 39588, true }, - { 39608, true }, - { 39620, true }, - { 39632, true }, - { 39650, true }, - { 39664, true }, - { 39683, true }, - { 39698, true }, - { 39712, true }, - { 39724, true }, - { 39740, true }, - { 39756, true }, - { 39777, true }, - { 39796, true }, - { 39823, true }, - { 39842, true }, - { 39862, true }, - { 39876, true }, - { 39893, true }, - { 39913, true }, - { 39926, true }, - { 39940, true }, - { 39961, true }, - { 39982, true }, + { 38657, false }, + { 38667, true }, + { 38697, true }, + { 38724, false }, + { 38738, true }, + { 38751, true }, + { 38770, true }, + { 38787, true }, + { 38801, false }, + { 38819, true }, + { 38827, true }, + { 38843, true }, + { 38854, true }, + { 38869, true }, + { 38882, true }, + { 38895, true }, + { 38910, true }, + { 38930, false }, + { 38945, true }, + { 38957, true }, + { 38969, true }, + { 38981, true }, + { 38994, true }, + { 39009, true }, + { 39022, true }, + { 39035, true }, + { 39048, false }, + { 39071, false }, + { 39095, true }, + { 39112, true }, + { 39125, true }, + { 39136, true }, + { 39148, true }, + { 39160, true }, + { 39174, true }, + { 39192, true }, + { 39203, true }, + { 39222, true }, + { 39239, true }, + { 39261, true }, + { 39280, true }, + { 39290, true }, + { 39304, true }, + { 39337, true }, + { 39358, true }, + { 39370, true }, + { 39385, true }, + { 39399, true }, + { 39410, true }, + { 39424, true }, + { 39437, true }, + { 39453, true }, + { 39466, true }, + { 39486, true }, + { 39494, true }, + { 39506, false }, + { 39518, true }, + { 39529, true }, + { 39546, true }, + { 39568, true }, + { 39581, true }, + { 39601, true }, + { 39613, true }, + { 39625, true }, + { 39643, true }, + { 39657, true }, + { 39676, true }, + { 39691, true }, + { 39705, true }, + { 39717, true }, + { 39733, true }, + { 39749, true }, + { 39770, true }, + { 39789, true }, + { 39816, true }, + { 39835, true }, + { 39855, true }, + { 39869, true }, + { 39886, true }, + { 39906, true }, + { 39919, true }, + { 39933, true }, + { 39954, true }, + { 39975, true }, + { 39988, true }, { 39995, true }, - { 40002, true }, - { 40014, true }, - { 40036, true }, - { 40052, true }, - { 40063, true }, - { 40079, true }, - { 40094, true }, - { 40107, true }, - { 40127, true }, - { 40141, true }, - { 40156, true }, - { 40166, true }, - { 40178, true }, - { 40190, true }, - { 40208, true }, - { 40227, true }, - { 40242, true }, - { 40263, false }, - { 40284, true }, - { 40304, true }, - { 40324, true }, - { 40356, true }, - { 40366, true }, - { 40385, true }, - { 40402, false }, - { 40426, false }, - { 40448, true }, - { 40472, true }, - { 40502, true }, - { 40526, true }, - { 40542, true }, - { 40559, true }, - { 40571, true }, - { 40589, true }, - { 40604, true }, - { 40621, true }, - { 40635, true }, - { 40657, true }, - { 40682, true }, - { 40695, true }, - { 40710, true }, - { 40732, true }, - { 40748, false }, - { 40773, true }, - { 40797, true }, - { 40821, true }, - { 40835, true }, - { 40850, true }, - { 40866, true }, - { 40885, true }, - { 40902, true }, - { 40920, true }, - { 40944, false }, - { 40966, true }, - { 40979, true }, - { 40990, true }, - { 41002, true }, - { 41016, true }, - { 41034, true }, - { 41053, true }, - { 41068, true }, - { 41096, true }, - { 41111, true }, - { 41134, true }, - { 41147, true }, - { 41158, true }, - { 41171, true }, - { 41190, true }, - { 41208, true }, - { 41230, true }, - { 41255, true }, - { 41278, true }, - { 41292, true }, - { 41305, true }, - { 41321, true }, - { 41334, true }, - { 41352, true }, - { 41362, true }, - { 41375, true }, - { 41402, true }, - { 41420, true }, - { 41441, true }, - { 41456, true }, - { 41474, true }, - { 41499, true }, - { 41514, false }, - { 41537, false }, - { 41546, true }, - { 41567, true }, - { 41584, true }, - { 41595, true }, - { 41608, true }, - { 41621, false }, - { 41660, true }, - { 41671, true }, - { 41684, true }, - { 41696, true }, - { 41712, true }, - { 41726, false }, - { 41741, true }, - { 41761, false }, - { 41777, true }, - { 41796, true }, - { 41807, true }, - { 41820, true }, - { 41832, true }, - { 41855, true }, - { 41867, true }, - { 41876, true }, - { 41886, true }, - { 41900, true }, - { 41915, true }, - { 41929, true }, - { 41945, true }, - { 41961, true }, - { 41978, true }, - { 41990, true }, - { 42004, true }, - { 42016, true }, - { 42039, true }, - { 42064, true }, - { 42084, true }, - { 42101, true }, - { 42110, true }, - { 42127, true }, - { 42139, true }, - { 42158, true }, - { 42171, true }, - { 42189, true }, - { 42201, true }, - { 42220, true }, - { 42242, true }, - { 42254, true }, - { 42284, true }, - { 42298, true }, - { 42322, true }, - { 42345, true }, - { 42359, true }, - { 42372, true }, - { 42384, true }, - { 42406, true }, - { 42426, true }, - { 42451, true }, - { 42463, true }, - { 42486, true }, - { 42505, true }, - { 42516, true }, - { 42530, true }, - { 42542, true }, - { 42560, true }, - { 42576, true }, - { 42594, true }, - { 42612, true }, - { 42630, true }, - { 42646, true }, - { 42663, true }, - { 42692, true }, - { 42705, true }, - { 42716, true }, - { 42734, true }, - { 42752, true }, - { 42775, true }, - { 42792, false }, - { 42807, true }, - { 42819, true }, - { 42831, true }, - { 42844, true }, - { 42853, true }, - { 42868, true }, - { 42887, true }, - { 42901, true }, - { 42913, true }, - { 42925, true }, - { 42939, false }, - { 42956, true }, - { 42967, true }, - { 42980, true }, - { 42997, true }, - { 43016, false }, - { 43029, true }, - { 43047, true }, - { 43073, true }, - { 43090, true }, - { 43109, true }, - { 43124, true }, - { 43139, true }, - { 43153, true }, - { 43170, true }, - { 43186, true }, - { 43205, true }, - { 43224, true }, - { 43244, true }, - { 43260, true }, - { 43276, true }, - { 43290, true }, - { 43300, true }, + { 40007, true }, + { 40029, true }, + { 40045, true }, + { 40056, true }, + { 40072, true }, + { 40087, true }, + { 40100, true }, + { 40120, true }, + { 40134, true }, + { 40149, true }, + { 40159, true }, + { 40171, true }, + { 40183, true }, + { 40201, true }, + { 40220, true }, + { 40235, true }, + { 40256, false }, + { 40277, true }, + { 40297, true }, + { 40317, true }, + { 40349, true }, + { 40359, true }, + { 40378, true }, + { 40395, false }, + { 40419, false }, + { 40441, true }, + { 40465, true }, + { 40495, true }, + { 40519, true }, + { 40535, true }, + { 40552, true }, + { 40564, true }, + { 40582, true }, + { 40597, true }, + { 40614, true }, + { 40628, true }, + { 40650, true }, + { 40675, true }, + { 40688, true }, + { 40703, true }, + { 40725, true }, + { 40741, false }, + { 40766, true }, + { 40790, true }, + { 40814, true }, + { 40828, true }, + { 40843, true }, + { 40859, true }, + { 40878, true }, + { 40895, true }, + { 40913, true }, + { 40937, false }, + { 40959, true }, + { 40972, true }, + { 40983, true }, + { 40995, true }, + { 41009, true }, + { 41027, true }, + { 41046, true }, + { 41061, true }, + { 41089, true }, + { 41104, true }, + { 41127, true }, + { 41140, true }, + { 41151, true }, + { 41164, true }, + { 41183, true }, + { 41201, true }, + { 41223, true }, + { 41248, true }, + { 41271, true }, + { 41285, true }, + { 41298, true }, + { 41314, true }, + { 41327, true }, + { 41345, true }, + { 41355, true }, + { 41368, true }, + { 41395, true }, + { 41413, true }, + { 41434, true }, + { 41449, true }, + { 41467, true }, + { 41492, true }, + { 41507, false }, + { 41530, false }, + { 41539, true }, + { 41560, true }, + { 41577, true }, + { 41588, true }, + { 41601, true }, + { 41614, false }, + { 41653, true }, + { 41664, true }, + { 41677, true }, + { 41689, true }, + { 41705, true }, + { 41719, false }, + { 41734, true }, + { 41754, false }, + { 41770, true }, + { 41789, true }, + { 41800, true }, + { 41813, true }, + { 41825, true }, + { 41848, true }, + { 41860, true }, + { 41869, true }, + { 41879, true }, + { 41893, true }, + { 41908, true }, + { 41922, true }, + { 41938, true }, + { 41954, true }, + { 41971, true }, + { 41983, true }, + { 41997, true }, + { 42009, true }, + { 42032, true }, + { 42057, true }, + { 42077, true }, + { 42094, true }, + { 42103, true }, + { 42120, true }, + { 42132, true }, + { 42147, true }, + { 42166, true }, + { 42179, true }, + { 42197, true }, + { 42209, true }, + { 42228, true }, + { 42250, true }, + { 42262, true }, + { 42292, true }, + { 42306, true }, + { 42330, true }, + { 42353, true }, + { 42367, true }, + { 42380, true }, + { 42392, true }, + { 42414, true }, + { 42434, true }, + { 42459, true }, + { 42471, true }, + { 42494, true }, + { 42513, true }, + { 42524, true }, + { 42538, true }, + { 42550, true }, + { 42568, true }, + { 42584, true }, + { 42602, true }, + { 42620, true }, + { 42638, true }, + { 42654, true }, + { 42671, true }, + { 42700, true }, + { 42713, true }, + { 42724, true }, + { 42742, true }, + { 42760, true }, + { 42783, true }, + { 42800, false }, + { 42815, true }, + { 42827, true }, + { 42839, true }, + { 42852, true }, + { 42861, true }, + { 42876, true }, + { 42895, true }, + { 42909, true }, + { 42921, true }, + { 42933, true }, + { 42947, false }, + { 42964, true }, + { 42975, true }, + { 42988, true }, + { 43005, true }, + { 43024, false }, + { 43037, true }, + { 43055, true }, + { 43081, true }, + { 43098, true }, + { 43117, true }, + { 43132, true }, + { 43147, true }, + { 43161, true }, + { 43178, true }, + { 43194, true }, + { 43213, true }, + { 43232, true }, + { 43252, true }, + { 43268, true }, + { 43284, true }, + { 43298, true }, { 43308, true }, - { 43334, true }, - { 43351, true }, - { 43372, true }, - { 43390, true }, - { 43409, true }, - { 43423, true }, - { 43442, true }, - { 43454, true }, - { 43470, false }, - { 43489, true }, - { 43503, true }, - { 43512, true }, - { 43529, true }, - { 43543, true }, - { 43558, true }, - { 43573, true }, - { 43590, true }, - { 43601, true }, - { 43619, true }, - { 43640, true }, - { 43651, true }, - { 43660, true }, - { 43679, true }, - { 43692, true }, - { 43707, true }, - { 43729, true }, - { 43743, false }, - { 43757, true }, - { 43773, true }, - { 43785, true }, - { 43802, true }, - { 43814, true }, - { 43829, true }, - { 43841, true }, - { 43864, true }, - { 43876, true }, - { 43899, true }, - { 43918, true }, - { 43934, true }, - { 43949, true }, - { 43959, true }, - { 43969, true }, - { 43976, true }, - { 43993, true }, - { 44007, true }, - { 44028, true }, - { 44037, true }, + { 43316, true }, + { 43342, true }, + { 43359, true }, + { 43380, true }, + { 43398, true }, + { 43417, true }, + { 43431, true }, + { 43450, true }, + { 43462, true }, + { 43478, false }, + { 43497, true }, + { 43511, true }, + { 43520, true }, + { 43537, true }, + { 43551, true }, + { 43566, true }, + { 43581, true }, + { 43598, true }, + { 43609, true }, + { 43627, true }, + { 43648, true }, + { 43659, true }, + { 43668, true }, + { 43687, true }, + { 43700, true }, + { 43715, true }, + { 43737, true }, + { 43751, false }, + { 43765, true }, + { 43781, true }, + { 43793, true }, + { 43810, true }, + { 43822, true }, + { 43837, true }, + { 43849, true }, + { 43872, true }, + { 43884, true }, + { 43907, true }, + { 43926, true }, + { 43942, true }, + { 43957, true }, + { 43967, true }, + { 43977, true }, + { 43984, true }, + { 44001, true }, + { 44015, true }, + { 44036, true }, { 44045, true }, - { 44059, false }, - { 44070, true }, - { 44086, false }, - { 44096, false }, - { 44112, true }, - { 44126, true }, - { 44141, true }, - { 44157, true }, - { 44179, true }, - { 44193, true }, - { 44207, true }, - { 44222, true }, - { 44237, true }, - { 44262, true }, - { 44282, true }, - { 44298, true }, - { 44311, true }, - { 44325, true }, - { 44338, true }, - { 44368, true }, - { 44380, true }, - { 44395, true }, - { 44405, true }, - { 44421, true }, - { 44429, false }, - { 44441, true }, - { 44452, true }, - { 44461, true }, - { 44471, true }, - { 44486, true }, - { 44503, true }, - { 44519, true }, - { 44532, true }, - { 44548, true }, - { 44556, true }, - { 44564, true }, - { 44575, true }, - { 44584, true }, - { 44597, true }, + { 44053, true }, + { 44067, false }, + { 44078, true }, + { 44094, false }, + { 44104, false }, + { 44120, true }, + { 44133, true }, + { 44147, true }, + { 44162, true }, + { 44178, true }, + { 44200, true }, + { 44214, true }, + { 44228, true }, + { 44243, true }, + { 44258, true }, + { 44283, true }, + { 44303, true }, + { 44319, true }, + { 44332, true }, + { 44346, true }, + { 44359, true }, + { 44389, true }, + { 44401, true }, + { 44416, true }, + { 44426, true }, + { 44442, true }, + { 44450, false }, + { 44462, true }, + { 44473, true }, + { 44482, true }, + { 44492, true }, + { 44507, true }, + { 44524, true }, + { 44540, true }, + { 44553, true }, + { 44569, true }, + { 44577, true }, + { 44585, true }, + { 44596, true }, { 44605, true }, - { 44623, true }, - { 44632, true }, - { 44641, true }, - { 44649, true }, - { 44664, true }, - { 44672, true }, - { 44692, true }, - { 44715, true }, - { 44728, true }, - { 44742, true }, - { 44761, true }, - { 44780, true }, - { 44794, true }, - { 44803, true }, - { 44823, true }, - { 44846, true }, - { 44856, true }, - { 44866, true }, - { 44884, true }, - { 44904, true }, - { 44917, true }, - { 44931, true }, - { 44947, true }, - { 44957, true }, + { 44618, true }, + { 44626, true }, + { 44644, true }, + { 44653, true }, + { 44662, true }, + { 44670, true }, + { 44685, true }, + { 44693, true }, + { 44713, true }, + { 44736, true }, + { 44749, true }, + { 44763, true }, + { 44782, true }, + { 44801, true }, + { 44815, true }, + { 44824, true }, + { 44844, true }, + { 44867, true }, + { 44877, true }, + { 44887, true }, + { 44905, true }, + { 44925, true }, + { 44938, true }, + { 44952, true }, { 44968, true }, { 44978, true }, - { 44995, true }, - { 45011, true }, - { 45018, true }, - { 45037, true }, - { 45050, true }, - { 45061, true }, - { 45068, true }, - { 45079, true }, - { 45090, true }, - { 45098, true }, - { 45112, true }, - { 45132, true }, + { 44989, true }, + { 44999, true }, + { 45016, true }, + { 45032, true }, + { 45039, true }, + { 45058, true }, + { 45071, true }, + { 45082, true }, + { 45089, true }, + { 45100, true }, + { 45111, true }, + { 45119, true }, + { 45133, true }, { 45153, true }, - { 45172, true }, - { 45187, true }, - { 45209, true }, - { 45221, false }, - { 45243, true }, - { 45262, true }, - { 45278, true }, - { 45296, true }, - { 45311, true }, - { 45328, true }, - { 45343, true }, - { 45362, true }, - { 45374, true }, - { 45394, true }, - { 45411, true }, - { 45425, true }, - { 45434, true }, + { 45174, true }, + { 45193, true }, + { 45208, true }, + { 45230, true }, + { 45242, false }, + { 45264, true }, + { 45283, true }, + { 45299, true }, + { 45317, true }, + { 45332, true }, + { 45349, true }, + { 45364, true }, + { 45383, true }, + { 45395, true }, + { 45415, true }, + { 45432, true }, { 45446, true }, - { 45456, true }, - { 45465, true }, - { 45474, true }, - { 45483, true }, - { 45492, true }, - { 45502, true }, - { 45512, true }, - { 45521, true }, - { 45530, true }, - { 45548, true }, - { 45564, true }, - { 45572, true }, - { 45579, true }, - { 45592, true }, - { 45609, true }, - { 45623, true }, + { 45455, true }, + { 45467, true }, + { 45477, true }, + { 45486, true }, + { 45495, true }, + { 45504, true }, + { 45513, true }, + { 45523, true }, + { 45533, true }, + { 45542, true }, + { 45551, true }, + { 45569, true }, + { 45585, true }, + { 45593, true }, + { 45600, true }, + { 45613, true }, { 45630, true }, - { 45640, true }, + { 45644, true }, { 45651, true }, - { 45668, true }, - { 45685, true }, - { 45705, true }, - { 45724, false }, - { 45738, true }, - { 45756, true }, - { 45769, true }, - { 45786, true }, - { 45800, true }, - { 45814, true }, - { 45831, true }, - { 45857, true }, - { 45871, true }, - { 45888, true }, - { 45903, true }, - { 45917, true }, - { 45932, true }, - { 45943, true }, - { 45956, true }, - { 45970, true }, - { 45980, true }, + { 45661, true }, + { 45672, true }, + { 45689, true }, + { 45706, true }, + { 45726, true }, + { 45745, false }, + { 45759, true }, + { 45777, true }, + { 45790, true }, + { 45807, true }, + { 45821, true }, + { 45835, true }, + { 45852, true }, + { 45878, true }, + { 45892, true }, + { 45909, true }, + { 45924, true }, + { 45938, true }, + { 45953, true }, + { 45964, true }, + { 45977, true }, { 45991, true }, - { 46010, true }, - { 46025, true }, - { 46040, true }, - { 46067, true }, - { 46077, true }, - { 46089, true }, - { 46100, true }, - { 46112, true }, - { 46120, true }, - { 46131, true }, - { 46140, true }, - { 46148, true }, - { 46159, true }, - { 46186, true }, - { 46196, true }, + { 46001, true }, + { 46012, true }, + { 46031, true }, + { 46046, true }, + { 46061, true }, + { 46088, true }, + { 46098, true }, + { 46110, true }, + { 46121, true }, + { 46133, true }, + { 46141, true }, + { 46152, true }, + { 46161, true }, + { 46169, true }, + { 46180, true }, { 46207, true }, - { 46218, true }, + { 46217, true }, { 46228, true }, - { 46242, true }, - { 46256, true }, - { 46267, true }, - { 46274, true }, - { 46282, true }, - { 46298, true }, - { 46312, true }, - { 46328, true }, - { 46342, true }, - { 46351, true }, + { 46239, true }, + { 46249, true }, + { 46263, true }, + { 46277, true }, + { 46288, true }, + { 46295, true }, + { 46303, true }, + { 46319, true }, + { 46333, true }, + { 46349, true }, { 46363, true }, - { 46370, true }, - { 46377, true }, - { 46393, true }, - { 46405, true }, - { 46419, true }, - { 46441, true }, - { 46452, true }, - { 46463, true }, - { 46474, true }, - { 46485, true }, - { 46501, true }, - { 46518, true }, - { 46531, true }, - { 46557, false }, - { 46580, true }, - { 46596, true }, - { 46606, true }, - { 46619, true }, - { 46638, true }, - { 46651, true }, - { 46662, true }, - { 46677, true }, - { 46695, true }, - { 46707, false }, - { 46719, true }, - { 46733, true }, - { 46745, true }, - { 46759, true }, - { 46777, true }, - { 46790, true }, - { 46809, true }, - { 46819, true }, + { 46372, true }, + { 46384, true }, + { 46391, true }, + { 46398, true }, + { 46414, true }, + { 46426, true }, + { 46440, true }, + { 46462, true }, + { 46473, true }, + { 46484, true }, + { 46495, true }, + { 46506, true }, + { 46522, true }, + { 46539, true }, + { 46552, true }, + { 46578, false }, + { 46601, true }, + { 46617, true }, + { 46627, true }, + { 46640, true }, + { 46659, true }, + { 46672, true }, + { 46683, true }, + { 46698, true }, + { 46716, true }, + { 46728, false }, + { 46740, true }, + { 46754, true }, + { 46766, true }, + { 46780, true }, + { 46798, true }, + { 46811, true }, { 46830, true }, - { 46843, true }, - { 46860, true }, - { 46878, true }, - { 46894, true }, - { 46907, true }, - { 46925, true }, - { 46939, true }, - { 46958, true }, - { 46976, true }, - { 46991, true }, + { 46840, true }, + { 46851, true }, + { 46864, true }, + { 46881, true }, + { 46899, true }, + { 46915, true }, + { 46928, true }, + { 46946, true }, + { 46960, true }, + { 46979, true }, + { 46997, true }, { 47012, true }, { 47033, true }, - { 47049, true }, - { 47065, true }, - { 47084, false }, + { 47054, true }, + { 47070, true }, + { 47086, true }, { 47105, false }, - { 47125, true }, - { 47145, true }, - { 47165, true }, - { 47181, true }, - { 47198, true }, - { 47217, true }, - { 47235, true }, - { 47255, true }, - { 47271, true }, - { 47282, false }, + { 47126, false }, + { 47146, true }, + { 47166, true }, + { 47186, true }, + { 47202, true }, + { 47219, true }, + { 47238, true }, + { 47256, true }, + { 47276, true }, { 47292, true }, - { 47301, true }, - { 47319, true }, - { 47333, true }, - { 47351, false }, - { 47363, true }, - { 47376, true }, - { 47391, true }, - { 47406, true }, - { 47421, true }, - { 47429, true }, - { 47447, true }, - { 47481, true }, - { 47492, true }, - { 47505, false }, - { 47519, true }, - { 47537, true }, - { 47555, true }, - { 47566, true }, - { 47581, true }, - { 47592, true }, - { 47606, true }, - { 47621, true }, - { 47638, true }, - { 47650, true }, - { 47679, true }, - { 47712, true }, - { 47724, true }, - { 47736, true }, - { 47753, true }, - { 47768, true }, - { 47780, true }, - { 47792, true }, - { 47807, false }, - { 47819, true }, - { 47828, true }, + { 47303, false }, + { 47313, true }, + { 47322, true }, + { 47340, true }, + { 47354, true }, + { 47372, false }, + { 47384, true }, + { 47397, true }, + { 47412, true }, + { 47427, true }, + { 47442, true }, + { 47450, true }, + { 47468, true }, + { 47502, true }, + { 47513, true }, + { 47526, false }, + { 47540, true }, + { 47558, true }, + { 47576, true }, + { 47587, true }, + { 47602, true }, + { 47613, true }, + { 47627, true }, + { 47642, true }, + { 47659, true }, + { 47671, true }, + { 47700, true }, + { 47733, true }, + { 47745, true }, + { 47757, true }, + { 47774, true }, + { 47789, true }, + { 47801, true }, + { 47813, true }, + { 47828, false }, { 47840, true }, - { 47857, true }, - { 47872, false }, - { 47886, true }, - { 47906, true }, - { 47924, false }, - { 47938, true }, - { 47949, true }, - { 47962, true }, - { 47972, false }, - { 47988, true }, - { 48002, true }, - { 48016, true }, - { 48027, true }, - { 48047, true }, - { 48060, true }, - { 48073, true }, - { 48084, true }, - { 48101, true }, - { 48127, true }, - { 48147, true }, - { 48161, true }, - { 48178, false }, - { 48192, true }, - { 48206, false }, - { 48223, true }, - { 48239, true }, - { 48252, true }, - { 48279, true }, - { 48298, true }, - { 48309, true }, - { 48324, true }, - { 48336, true }, - { 48351, true }, - { 48366, true }, - { 48381, true }, - { 48403, true }, - { 48421, true }, - { 48437, true }, - { 48454, true }, - { 48474, true }, - { 48488, true }, - { 48504, true }, - { 48522, true }, - { 48541, true }, - { 48554, true }, - { 48571, true }, - { 48584, true }, - { 48598, true }, - { 48613, true }, - { 48629, true }, - { 48648, true }, + { 47849, true }, + { 47861, true }, + { 47878, true }, + { 47893, false }, + { 47907, true }, + { 47927, true }, + { 47945, false }, + { 47959, true }, + { 47970, true }, + { 47983, true }, + { 47993, false }, + { 48009, true }, + { 48023, true }, + { 48037, true }, + { 48048, true }, + { 48068, true }, + { 48081, true }, + { 48094, true }, + { 48105, true }, + { 48122, true }, + { 48148, true }, + { 48168, true }, + { 48182, true }, + { 48199, false }, + { 48213, true }, + { 48227, false }, + { 48244, true }, + { 48260, true }, + { 48273, true }, + { 48300, true }, + { 48319, true }, + { 48330, true }, + { 48345, true }, + { 48357, true }, + { 48372, true }, + { 48387, true }, + { 48402, true }, + { 48424, true }, + { 48442, true }, + { 48458, true }, + { 48475, true }, + { 48495, true }, + { 48509, true }, + { 48525, true }, + { 48543, true }, + { 48562, true }, + { 48575, true }, + { 48592, true }, + { 48605, true }, + { 48619, true }, + { 48634, true }, + { 48650, true }, { 48669, true }, - { 48686, true }, - { 48702, true }, - { 48714, true }, - { 48727, true }, - { 48753, true }, - { 48773, false }, - { 48784, true }, - { 48802, true }, - { 48816, true }, - { 48828, true }, - { 48836, true }, - { 48845, true }, - { 48862, true }, - { 48873, true }, - { 48885, true }, - { 48893, true }, - { 48903, true }, + { 48690, true }, + { 48707, true }, + { 48723, true }, + { 48735, true }, + { 48748, true }, + { 48774, true }, + { 48794, false }, + { 48805, true }, + { 48823, true }, + { 48837, true }, + { 48849, true }, + { 48857, true }, + { 48866, true }, + { 48883, true }, + { 48894, true }, + { 48906, true }, { 48914, true }, + { 48924, true }, { 48935, true }, - { 48947, true }, - { 48958, true }, - { 48966, true }, - { 48973, true }, - { 48981, true }, - { 48992, true }, - { 49008, true }, - { 49018, true }, + { 48956, true }, + { 48968, true }, + { 48979, true }, + { 48987, true }, + { 48994, true }, + { 49002, true }, + { 49013, true }, { 49029, true }, - { 49045, true }, - { 49058, true }, - { 49073, true }, - { 49090, true }, - { 49112, true }, + { 49039, true }, + { 49050, true }, + { 49066, true }, + { 49079, true }, + { 49094, true }, + { 49111, true }, { 49133, true }, - { 49141, true }, { 49154, true }, - { 49164, true }, - { 49178, true }, - { 49189, false }, - { 49209, true }, - { 49224, true }, - { 49237, true }, - { 49249, true }, + { 49162, true }, + { 49175, true }, + { 49185, true }, + { 49199, true }, + { 49210, false }, + { 49230, true }, + { 49245, true }, + { 49258, true }, { 49270, true }, - { 49284, true }, - { 49298, true }, - { 49315, true }, - { 49330, true }, - { 49344, true }, - { 49358, true }, - { 49372, true }, - { 49386, true }, - { 49400, true }, - { 49415, true }, - { 49427, true }, - { 49441, true }, - { 49459, true }, - { 49474, true }, - { 49484, true }, - { 49497, true }, - { 49510, true }, + { 49291, true }, + { 49305, true }, + { 49319, true }, + { 49336, true }, + { 49351, true }, + { 49365, true }, + { 49379, true }, + { 49393, true }, + { 49407, true }, + { 49421, true }, + { 49436, true }, + { 49448, true }, + { 49462, true }, + { 49480, true }, + { 49495, true }, + { 49505, true }, + { 49518, true }, { 49531, true }, - { 49546, true }, - { 49563, true }, - { 49576, true }, - { 49591, true }, - { 49603, true }, - { 49618, true }, - { 49635, true }, - { 49652, true }, - { 49660, true }, - { 49672, true }, + { 49552, true }, + { 49567, true }, + { 49584, true }, + { 49597, true }, + { 49612, true }, + { 49624, true }, + { 49639, true }, + { 49656, true }, + { 49673, true }, { 49681, true }, - { 49701, true }, - { 49712, true }, - { 49727, true }, - { 49743, true }, - { 49750, true }, - { 49773, true }, - { 49787, true }, - { 49802, true }, - { 49817, true }, - { 49832, true }, - { 49843, true }, + { 49693, true }, + { 49702, true }, + { 49722, true }, + { 49733, true }, + { 49748, true }, + { 49764, true }, + { 49771, true }, + { 49794, true }, + { 49808, true }, + { 49823, true }, + { 49838, true }, { 49853, true }, - { 49862, true }, + { 49864, true }, { 49874, true }, - { 49885, true }, - { 49896, true }, - { 49909, true }, - { 49919, true }, - { 49935, true }, - { 49950, true }, - { 49966, true }, - { 49983, true }, - { 50000, true }, - { 50014, true }, - { 50029, true }, - { 50045, true }, - { 50060, true }, - { 50070, true }, - { 50083, true }, + { 49886, true }, + { 49897, true }, + { 49908, true }, + { 49921, true }, + { 49931, true }, + { 49947, true }, + { 49962, true }, + { 49978, true }, + { 49995, true }, + { 50012, true }, + { 50026, true }, + { 50041, true }, + { 50057, true }, + { 50072, true }, + { 50082, true }, { 50095, true }, - { 50123, true }, + { 50107, true }, { 50135, true }, - { 50149, true }, - { 50163, true }, - { 50174, true }, - { 50190, true }, - { 50201, true }, - { 50214, true }, - { 50225, true }, - { 50247, true }, - { 50267, true }, - { 50288, true }, - { 50303, true }, - { 50317, true }, - { 50332, true }, - { 50346, true }, + { 50147, true }, + { 50161, true }, + { 50175, true }, + { 50186, true }, + { 50202, true }, + { 50213, true }, + { 50226, true }, + { 50237, true }, + { 50259, true }, + { 50279, true }, + { 50300, true }, + { 50315, true }, + { 50329, true }, + { 50344, true }, { 50358, true }, - { 50377, true }, - { 50394, true }, - { 50407, true }, - { 50421, true }, + { 50370, true }, + { 50389, true }, + { 50406, true }, + { 50419, true }, { 50433, true }, - { 50446, true }, + { 50445, true }, { 50458, true }, - { 50471, true }, - { 50484, true }, - { 50495, true }, - { 50513, true }, - { 50531, true }, - { 50544, true }, + { 50470, true }, + { 50483, true }, + { 50496, true }, + { 50507, true }, + { 50525, true }, + { 50543, true }, { 50556, true }, - { 50570, true }, - { 50584, true }, - { 50592, true }, - { 50621, true }, - { 50640, true }, - { 50653, true }, - { 50678, true }, - { 50695, true }, - { 50716, true }, + { 50568, true }, + { 50582, true }, + { 50596, true }, + { 50604, true }, + { 50633, true }, + { 50652, true }, + { 50665, true }, + { 50690, true }, + { 50707, true }, { 50728, true }, - { 50745, true }, - { 50769, true }, - { 50802, true }, + { 50740, true }, + { 50757, true }, + { 50781, true }, { 50814, true }, - { 50836, true }, - { 50853, true }, - { 50868, true }, - { 50882, true }, - { 50908, true }, - { 50927, true }, - { 50940, true }, - { 50950, true }, - { 50960, true }, - { 50981, true }, - { 50990, true }, - { 51008, true }, - { 51026, true }, - { 51053, true }, - { 51078, true }, - { 51093, true }, - { 51113, true }, - { 51128, true }, - { 51143, true }, - { 51164, true }, - { 51188, true }, - { 51201, true }, - { 51230, true }, - { 51240, true }, - { 51251, false }, - { 51265, true }, - { 51276, true }, - { 51290, true }, - { 51309, true }, - { 51323, true }, - { 51338, false }, - { 51353, true }, - { 51370, true }, - { 51379, true }, - { 51389, true }, - { 51427, true }, - { 51442, true }, - { 51453, true }, + { 50826, true }, + { 50848, true }, + { 50865, true }, + { 50880, true }, + { 50894, true }, + { 50920, true }, + { 50939, true }, + { 50952, true }, + { 50962, true }, + { 50972, true }, + { 50993, true }, + { 51002, true }, + { 51020, true }, + { 51038, true }, + { 51065, true }, + { 51090, true }, + { 51105, true }, + { 51125, true }, + { 51140, true }, + { 51155, true }, + { 51176, true }, + { 51200, true }, + { 51213, true }, + { 51242, true }, + { 51252, true }, + { 51263, false }, + { 51277, true }, + { 51288, true }, + { 51302, true }, + { 51321, true }, + { 51335, true }, + { 51350, false }, + { 51365, true }, + { 51382, true }, + { 51391, true }, + { 51401, true }, + { 51439, true }, + { 51454, true }, { 51465, true }, - { 51483, true }, + { 51477, true }, { 51495, true }, - { 51506, true }, - { 51523, true }, - { 51531, true }, - { 51540, true }, - { 51550, true }, - { 51563, true }, - { 51573, true }, - { 51587, false }, - { 51612, true }, - { 51630, false }, - { 51654, true }, - { 51668, true }, - { 51687, true }, - { 51714, true }, + { 51507, true }, + { 51518, true }, + { 51535, true }, + { 51543, true }, + { 51552, true }, + { 51562, true }, + { 51575, true }, + { 51585, true }, + { 51599, false }, + { 51624, true }, + { 51642, false }, + { 51666, true }, + { 51680, true }, + { 51699, true }, { 51726, true }, { 51738, true }, - { 51746, true }, - { 51755, true }, - { 51769, true }, - { 51786, true }, - { 51801, false }, - { 51813, true }, + { 51750, true }, + { 51758, true }, + { 51767, true }, + { 51781, true }, + { 51798, true }, + { 51813, false }, { 51825, true }, - { 51842, true }, + { 51837, true }, { 51854, true }, { 51866, true }, - { 51876, true }, - { 51887, true }, + { 51878, true }, + { 51888, true }, { 51899, true }, - { 51912, true }, - { 51926, true }, - { 51943, true }, - { 51954, true }, - { 51972, true }, + { 51911, true }, + { 51924, true }, + { 51938, true }, + { 51955, true }, + { 51966, true }, { 51984, true }, { 51996, true }, - { 52007, true }, + { 52008, true }, { 52019, true }, - { 52029, true }, - { 52042, true }, - { 52064, true }, - { 52078, true }, - { 52087, true }, + { 52031, true }, + { 52041, true }, + { 52054, true }, + { 52076, true }, + { 52090, true }, { 52099, true }, - { 52106, true }, + { 52111, true }, { 52118, true }, - { 52127, true }, - { 52136, true }, - { 52146, true }, - { 52160, true }, - { 52177, true }, - { 52188, true }, - { 52202, true }, - { 52211, true }, - { 52220, true }, - { 52229, true }, - { 52244, true }, - { 52260, true }, - { 52276, true }, - { 52293, true }, - { 52310, true }, - { 52320, true }, - { 52342, true }, - { 52351, true }, - { 52363, true }, - { 52377, true }, - { 52391, true }, - { 52406, true }, - { 52439, true }, - { 52467, true }, - { 52492, true }, - { 52508, true }, - { 52520, true }, - { 52531, true }, - { 52556, true }, - { 52571, true }, - { 52593, true }, - { 52624, true }, - { 52635, true }, - { 52651, true }, - { 52665, true }, - { 52674, true }, - { 52692, true }, - { 52706, true }, - { 52721, false }, - { 52738, true }, - { 52756, true }, - { 52769, true }, - { 52779, true }, - { 52802, true }, - { 52814, true }, - { 52829, true }, - { 52844, true }, - { 52855, true }, - { 52869, true }, - { 52883, true }, - { 52896, true }, - { 52908, true }, + { 52130, true }, + { 52139, true }, + { 52148, true }, + { 52158, true }, + { 52172, true }, + { 52189, true }, + { 52200, true }, + { 52214, true }, + { 52223, true }, + { 52232, true }, + { 52241, true }, + { 52256, true }, + { 52268, true }, + { 52284, true }, + { 52300, true }, + { 52317, true }, + { 52334, true }, + { 52344, true }, + { 52366, true }, + { 52375, true }, + { 52387, true }, + { 52401, true }, + { 52415, true }, + { 52430, true }, + { 52463, true }, + { 52491, true }, + { 52516, true }, + { 52532, true }, + { 52544, true }, + { 52555, true }, + { 52580, true }, + { 52595, true }, + { 52617, true }, + { 52648, true }, + { 52659, true }, + { 52675, true }, + { 52689, true }, + { 52698, true }, + { 52716, true }, + { 52730, true }, + { 52745, false }, + { 52762, true }, + { 52780, true }, + { 52793, true }, + { 52803, true }, + { 52826, true }, + { 52838, true }, + { 52853, true }, + { 52868, true }, + { 52879, true }, + { 52893, true }, + { 52907, true }, { 52920, true }, { 52932, true }, - { 52943, true }, - { 52959, true }, - { 52972, true }, - { 52984, false }, - { 53001, true }, - { 53021, true }, - { 53038, true }, - { 53056, true }, - { 53072, true }, - { 53087, true }, - { 53102, true }, - { 53125, true }, - { 53151, true }, - { 53171, true }, - { 53186, true }, - { 53206, false }, - { 53224, true }, - { 53243, true }, - { 53260, true }, - { 53279, true }, - { 53292, true }, - { 53309, true }, - { 53319, false }, - { 53336, true }, - { 53355, true }, - { 53372, true }, - { 53386, true }, - { 53403, true }, - { 53411, true }, - { 53422, true }, - { 53434, true }, - { 53444, true }, - { 53455, true }, - { 53465, true }, - { 53475, true }, - { 53488, true }, - { 53502, true }, - { 53513, true }, + { 52944, true }, + { 52956, true }, + { 52967, true }, + { 52983, true }, + { 52996, true }, + { 53008, false }, + { 53025, true }, + { 53045, true }, + { 53062, true }, + { 53080, true }, + { 53096, true }, + { 53111, true }, + { 53126, true }, + { 53149, true }, + { 53175, true }, + { 53195, true }, + { 53210, true }, + { 53230, false }, + { 53248, true }, + { 53267, true }, + { 53284, true }, + { 53303, true }, + { 53316, true }, + { 53333, true }, + { 53343, false }, + { 53360, true }, + { 53379, true }, + { 53396, true }, + { 53410, true }, + { 53427, true }, + { 53435, true }, + { 53446, true }, + { 53458, true }, + { 53468, true }, + { 53479, true }, + { 53489, true }, + { 53499, true }, + { 53512, true }, { 53526, true }, - { 53545, false }, - { 53553, true }, - { 53564, true }, + { 53537, true }, + { 53550, true }, + { 53569, false }, { 53577, true }, - { 53590, true }, - { 53609, true }, - { 53625, true }, + { 53588, true }, + { 53601, true }, + { 53614, true }, + { 53633, true }, { 53649, true }, - { 53661, true }, - { 53675, true }, - { 53689, true }, - { 53700, true }, - { 53714, true }, - { 53726, true }, - { 53741, true }, - { 53757, true }, - { 53769, true }, - { 53784, true }, - { 53802, true }, - { 53817, true }, - { 53831, true }, - { 53853, true }, - { 53868, true }, - { 53884, true }, - { 53898, true }, - { 53919, true }, - { 53935, true }, - { 53954, true }, - { 53973, true }, - { 53990, false }, - { 54010, true }, - { 54040, true }, - { 54066, true }, - { 54083, true }, - { 54105, true }, - { 54121, true }, - { 54141, true }, - { 54155, true }, - { 54178, true }, - { 54197, true }, - { 54215, true }, - { 54230, true }, - { 54241, true }, - { 54252, true }, - { 54262, true }, - { 54280, true }, - { 54299, true }, - { 54309, true }, - { 54327, true }, - { 54336, false }, - { 54347, false }, - { 54367, true }, - { 54375, true }, - { 54390, true }, - { 54404, true }, - { 54417, true }, - { 54427, true }, - { 54436, true }, - { 54449, true }, - { 54469, true }, - { 54478, false }, - { 54493, true }, - { 54502, false }, - { 54511, true }, - { 54527, true }, - { 54544, true }, - { 54553, true }, - { 54560, true }, - { 54568, true }, - { 54580, true }, - { 54589, true }, - { 54599, true }, - { 54616, true }, - { 54626, true }, - { 54634, true }, - { 54642, true }, - { 54649, true }, - { 54660, true }, - { 54673, true }, - { 54680, true }, - { 54690, true }, - { 54705, true }, - { 54720, true }, - { 54733, true }, - { 54745, true }, - { 54760, true }, - { 54771, true }, - { 54781, true }, - { 54789, true }, - { 54798, true }, - { 54806, true }, - { 54820, true }, - { 54832, true }, - { 54847, true }, - { 54854, true }, - { 54864, true }, - { 54881, true }, - { 54891, true }, - { 54907, true }, - { 54923, true }, - { 54942, true }, - { 54956, true }, - { 54972, true }, - { 54985, true }, - { 55000, true }, - { 55011, true }, - { 55023, true }, - { 55048, false }, - { 55057, true }, - { 55070, true }, - { 55079, true }, - { 55095, true }, - { 55105, true }, - { 55118, true }, - { 55139, true }, - { 55148, true }, - { 55163, true }, - { 55177, true }, - { 55191, true }, - { 55203, true }, - { 55225, true }, - { 55236, true }, - { 55248, true }, - { 55259, true }, - { 55273, true }, - { 55293, true }, - { 55307, true }, - { 55330, true }, - { 55346, true }, - { 55354, true }, - { 55368, true }, - { 55383, true }, - { 55400, true }, - { 55414, true }, - { 55433, true }, - { 55449, true }, - { 55460, true }, - { 55471, true }, - { 55483, true }, - { 55504, true }, - { 55521, true }, - { 55539, true }, - { 55560, true }, - { 55575, true }, - { 55593, true }, - { 55608, true }, - { 55636, true }, - { 55646, true }, - { 55656, true }, - { 55675, false }, - { 55687, true }, - { 55701, true }, - { 55714, true }, - { 55733, true }, - { 55749, true }, - { 55763, true }, - { 55778, true }, - { 55801, true }, - { 55814, true }, - { 55831, true }, - { 55840, true }, - { 55855, true }, - { 55876, true }, - { 55891, true }, - { 55907, true }, - { 55920, true }, - { 55933, true }, - { 55945, true }, - { 55970, true }, - { 55984, true }, - { 55995, true }, - { 56012, true }, - { 56029, true }, - { 56040, true }, - { 56054, true }, - { 56061, true }, - { 56070, true }, - { 56089, true }, - { 56104, true }, - { 56115, true }, - { 56139, true }, - { 56150, true }, - { 56160, true }, - { 56173, true }, - { 56185, true }, - { 56196, true }, - { 56207, true }, - { 56219, true }, - { 56240, true }, - { 56254, true }, - { 56269, true }, - { 56286, true }, - { 56301, true }, - { 56313, true }, - { 56329, true }, - { 56350, true }, - { 56367, true }, - { 56396, true }, - { 56410, true }, - { 56421, false }, - { 56444, false }, - { 56458, true }, - { 56467, true }, - { 56481, true }, - { 56499, true }, - { 56514, true }, - { 56530, true }, - { 56547, true }, - { 56564, true }, - { 56581, true }, - { 56592, true }, - { 56610, true }, - { 56629, true }, - { 56652, true }, - { 56666, true }, - { 56685, true }, - { 56704, true }, + { 53673, true }, + { 53685, true }, + { 53699, true }, + { 53713, true }, + { 53724, true }, + { 53738, true }, + { 53750, true }, + { 53765, true }, + { 53781, true }, + { 53793, true }, + { 53808, true }, + { 53826, true }, + { 53841, true }, + { 53855, true }, + { 53877, true }, + { 53892, true }, + { 53908, true }, + { 53922, true }, + { 53943, true }, + { 53959, true }, + { 53978, true }, + { 53997, true }, + { 54014, false }, + { 54034, true }, + { 54064, true }, + { 54090, true }, + { 54107, true }, + { 54129, true }, + { 54145, true }, + { 54165, true }, + { 54179, true }, + { 54202, true }, + { 54221, true }, + { 54239, true }, + { 54254, true }, + { 54265, true }, + { 54276, true }, + { 54286, true }, + { 54304, true }, + { 54323, true }, + { 54333, true }, + { 54342, false }, + { 54353, false }, + { 54373, true }, + { 54381, true }, + { 54396, true }, + { 54410, true }, + { 54423, true }, + { 54433, true }, + { 54442, true }, + { 54455, true }, + { 54475, true }, + { 54484, false }, + { 54499, true }, + { 54508, false }, + { 54517, true }, + { 54533, true }, + { 54550, true }, + { 54559, true }, + { 54566, true }, + { 54574, true }, + { 54586, true }, + { 54595, true }, + { 54605, true }, + { 54622, true }, + { 54632, true }, + { 54640, true }, + { 54648, true }, + { 54655, true }, + { 54666, true }, + { 54679, true }, + { 54686, true }, + { 54696, true }, + { 54711, true }, + { 54726, true }, + { 54739, true }, + { 54751, true }, + { 54766, true }, + { 54777, true }, + { 54787, true }, + { 54795, true }, + { 54804, true }, + { 54812, true }, + { 54826, true }, + { 54838, true }, + { 54853, true }, + { 54860, true }, + { 54870, true }, + { 54887, true }, + { 54897, true }, + { 54913, true }, + { 54929, true }, + { 54948, true }, + { 54962, true }, + { 54978, true }, + { 54991, true }, + { 55006, true }, + { 55017, true }, + { 55029, true }, + { 55054, false }, + { 55063, true }, + { 55076, true }, + { 55085, true }, + { 55101, true }, + { 55111, true }, + { 55124, true }, + { 55145, true }, + { 55154, true }, + { 55169, true }, + { 55183, true }, + { 55197, true }, + { 55209, true }, + { 55231, true }, + { 55242, true }, + { 55254, true }, + { 55265, true }, + { 55279, true }, + { 55299, true }, + { 55313, true }, + { 55336, true }, + { 55352, true }, + { 55360, true }, + { 55374, true }, + { 55389, true }, + { 55406, true }, + { 55420, true }, + { 55439, true }, + { 55455, true }, + { 55466, true }, + { 55477, true }, + { 55489, true }, + { 55510, true }, + { 55527, true }, + { 55545, true }, + { 55566, true }, + { 55581, true }, + { 55599, true }, + { 55614, true }, + { 55642, true }, + { 55652, true }, + { 55662, true }, + { 55681, false }, + { 55693, true }, + { 55707, true }, + { 55720, true }, + { 55739, true }, + { 55755, true }, + { 55769, true }, + { 55784, true }, + { 55807, true }, + { 55820, true }, + { 55837, true }, + { 55846, true }, + { 55861, true }, + { 55882, true }, + { 55897, true }, + { 55913, true }, + { 55926, true }, + { 55939, true }, + { 55951, true }, + { 55976, true }, + { 55990, true }, + { 56001, true }, + { 56018, true }, + { 56035, true }, + { 56046, true }, + { 56060, true }, + { 56067, true }, + { 56076, true }, + { 56095, true }, + { 56110, true }, + { 56121, true }, + { 56145, true }, + { 56156, true }, + { 56166, true }, + { 56179, true }, + { 56191, true }, + { 56202, true }, + { 56213, true }, + { 56225, true }, + { 56246, true }, + { 56260, true }, + { 56275, true }, + { 56292, true }, + { 56307, true }, + { 56319, true }, + { 56335, true }, + { 56356, true }, + { 56373, true }, + { 56402, true }, + { 56416, true }, + { 56427, false }, + { 56450, true }, + { 56459, true }, + { 56473, true }, + { 56491, true }, + { 56506, true }, + { 56522, true }, + { 56539, true }, + { 56556, true }, + { 56573, true }, + { 56584, true }, + { 56602, true }, + { 56616, true }, + { 56635, true }, + { 56654, true }, + { 56668, true }, + { 56679, true }, + { 56689, true }, + { 56702, true }, { 56718, true }, - { 56729, true }, - { 56739, true }, - { 56752, true }, - { 56768, true }, - { 56788, true }, - { 56808, true }, - { 56828, true }, - { 56847, false }, - { 56865, true }, - { 56894, true }, - { 56910, true }, + { 56738, true }, + { 56758, true }, + { 56778, true }, + { 56797, false }, + { 56815, true }, + { 56844, true }, + { 56860, true }, + { 56876, true }, + { 56886, true }, + { 56902, true }, + { 56917, true }, { 56926, true }, - { 56936, true }, - { 56952, true }, - { 56967, true }, - { 56976, true }, - { 56991, true }, - { 56999, true }, - { 57014, true }, - { 57027, true }, - { 57039, true }, - { 57054, true }, - { 57070, false }, - { 57080, true }, - { 57097, true }, - { 57110, true }, - { 57128, true }, - { 57150, true }, - { 57172, true }, - { 57190, true }, - { 57201, true }, - { 57210, true }, - { 57231, true }, - { 57243, true }, - { 57264, true }, - { 57276, true }, - { 57289, true }, - { 57304, true }, - { 57316, true }, - { 57333, true }, - { 57342, true }, - { 57357, true }, - { 57387, true }, - { 57425, true }, - { 57456, true }, - { 57488, true }, - { 57516, true }, - { 57550, true }, - { 57580, true }, - { 57610, true }, - { 57645, true }, - { 57674, true }, - { 57710, true }, + { 56941, true }, + { 56949, true }, + { 56964, true }, + { 56977, true }, + { 56989, true }, + { 57004, true }, + { 57020, false }, + { 57030, true }, + { 57047, true }, + { 57060, true }, + { 57078, true }, + { 57100, true }, + { 57122, true }, + { 57140, true }, + { 57151, true }, + { 57160, true }, + { 57181, true }, + { 57193, true }, + { 57214, true }, + { 57226, true }, + { 57239, true }, + { 57254, true }, + { 57266, true }, + { 57283, true }, + { 57292, true }, + { 57307, true }, + { 57337, true }, + { 57375, true }, + { 57406, true }, + { 57438, true }, + { 57466, true }, + { 57500, true }, + { 57530, true }, + { 57560, true }, + { 57595, true }, + { 57624, true }, + { 57660, true }, + { 57672, true }, + { 57686, true }, + { 57702, true }, + { 57712, true }, { 57722, true }, - { 57736, true }, - { 57752, true }, - { 57762, true }, - { 57772, true }, - { 57787, true }, - { 57809, true }, - { 57823, true }, - { 57833, true }, - { 57853, true }, - { 57864, true }, - { 57880, true }, - { 57898, true }, - { 57906, true }, - { 57920, true }, - { 57935, true }, - { 57943, true }, - { 57952, true }, - { 57975, true }, - { 57986, true }, - { 58001, true }, - { 58019, true }, - { 58031, true }, - { 58047, true }, - { 58062, false }, - { 58075, true }, - { 58086, true }, - { 58101, true }, - { 58118, true }, - { 58129, true }, - { 58138, true }, - { 58147, true }, - { 58163, true }, - { 58173, false }, - { 58192, true }, - { 58206, true }, - { 58224, true }, - { 58232, true }, - { 58241, true }, - { 58251, true }, - { 58261, true }, - { 58276, true }, - { 58286, true }, - { 58307, true }, - { 58316, true }, - { 58332, true }, + { 57737, true }, + { 57759, true }, + { 57773, true }, + { 57783, true }, + { 57803, true }, + { 57814, true }, + { 57830, true }, + { 57848, true }, + { 57856, true }, + { 57870, true }, + { 57885, true }, + { 57893, true }, + { 57902, true }, + { 57925, true }, + { 57936, true }, + { 57951, true }, + { 57969, true }, + { 57981, true }, + { 57997, true }, + { 58012, false }, + { 58025, true }, + { 58036, true }, + { 58051, true }, + { 58068, true }, + { 58079, true }, + { 58088, true }, + { 58097, true }, + { 58113, true }, + { 58123, false }, + { 58142, true }, + { 58156, true }, + { 58174, true }, + { 58182, true }, + { 58191, true }, + { 58201, true }, + { 58211, true }, + { 58226, true }, + { 58236, true }, + { 58257, true }, + { 58266, true }, + { 58282, true }, + { 58292, true }, + { 58311, true }, + { 58324, true }, { 58342, true }, - { 58355, true }, - { 58373, true }, - { 58393, true }, - { 58413, true }, - { 58421, true }, - { 58434, true }, - { 58445, true }, - { 58463, true }, - { 58473, true }, - { 58482, true }, - { 58491, true }, - { 58499, false }, - { 58506, true }, - { 58516, true }, - { 58528, true }, - { 58538, true }, - { 58552, true }, - { 58567, true }, - { 58574, true }, - { 58587, false }, - { 58602, true }, - { 58622, true }, - { 58642, true }, - { 58661, true }, - { 58678, true }, - { 58689, true }, - { 58704, true }, - { 58714, true }, - { 58730, true }, - { 58747, true }, - { 58757, true }, - { 58771, true }, - { 58788, true }, - { 58809, true }, - { 58818, true }, - { 58834, true }, + { 58362, true }, + { 58382, true }, + { 58390, true }, + { 58403, true }, + { 58414, true }, + { 58432, true }, + { 58442, true }, + { 58451, true }, + { 58460, true }, + { 58468, false }, + { 58475, true }, + { 58485, true }, + { 58497, true }, + { 58507, true }, + { 58522, true }, + { 58529, true }, + { 58542, false }, + { 58557, true }, + { 58577, true }, + { 58597, true }, + { 58616, true }, + { 58633, true }, + { 58644, true }, + { 58659, true }, + { 58669, true }, + { 58679, true }, + { 58695, true }, + { 58712, true }, + { 58722, true }, + { 58736, true }, + { 58753, true }, + { 58774, true }, + { 58783, true }, + { 58799, true }, + { 58819, true }, + { 58832, true }, + { 58842, true }, { 58854, true }, - { 58867, true }, - { 58877, true }, - { 58889, true }, - { 58898, true }, - { 58908, true }, - { 58919, true }, - { 58927, true }, - { 58934, true }, - { 58948, true }, - { 58973, true }, - { 58991, true }, - { 59009, true }, - { 59023, true }, - { 59032, true }, - { 59045, true }, - { 59062, true }, - { 59071, true }, - { 59084, true }, - { 59101, true }, - { 59118, true }, - { 59133, true }, - { 59162, true }, - { 59180, false }, - { 59193, true }, - { 59209, true }, - { 59225, true }, - { 59238, true }, - { 59251, true }, - { 59262, true }, - { 59275, true }, - { 59285, false }, - { 59303, true }, - { 59316, true }, + { 58863, true }, + { 58873, true }, + { 58884, true }, + { 58892, true }, + { 58899, true }, + { 58913, true }, + { 58938, true }, + { 58956, true }, + { 58974, true }, + { 58988, true }, + { 58997, true }, + { 59010, true }, + { 59027, true }, + { 59036, true }, + { 59049, true }, + { 59066, true }, + { 59083, true }, + { 59098, true }, + { 59127, true }, + { 59145, false }, + { 59158, true }, + { 59174, true }, + { 59190, true }, + { 59203, true }, + { 59216, true }, + { 59227, true }, + { 59240, true }, + { 59250, false }, + { 59268, true }, + { 59281, true }, + { 59294, true }, + { 59310, true }, { 59329, true }, - { 59345, true }, - { 59364, true }, - { 59379, true }, - { 59386, true }, - { 59415, true }, - { 59437, true }, - { 59458, true }, - { 59485, true }, - { 59505, true }, - { 59513, true }, - { 59524, true }, - { 59544, true }, - { 59563, true }, - { 59578, true }, - { 59597, true }, - { 59608, true }, - { 59619, true }, - { 59637, true }, - { 59653, false }, - { 59668, true }, - { 59683, true }, - { 59700, true }, - { 59715, true }, - { 59734, true }, - { 59748, true }, - { 59766, true }, - { 59775, true }, - { 59785, true }, - { 59796, true }, - { 59812, true }, - { 59826, true }, - { 59840, true }, - { 59853, true }, - { 59866, true }, - { 59880, true }, - { 59894, true }, + { 59344, true }, + { 59351, true }, + { 59380, true }, + { 59402, true }, + { 59423, true }, + { 59450, true }, + { 59470, true }, + { 59478, true }, + { 59489, true }, + { 59509, true }, + { 59528, true }, + { 59543, true }, + { 59562, true }, + { 59573, true }, + { 59584, true }, + { 59602, true }, + { 59618, false }, + { 59633, true }, + { 59648, true }, + { 59665, true }, + { 59680, true }, + { 59699, true }, + { 59713, true }, + { 59731, true }, + { 59740, true }, + { 59750, true }, + { 59761, true }, + { 59777, true }, + { 59791, true }, + { 59805, true }, + { 59818, true }, + { 59831, true }, + { 59845, true }, + { 59859, true }, + { 59868, true }, + { 59879, true }, { 59903, true }, - { 59914, true }, - { 59938, true }, - { 59959, true }, - { 59971, true }, - { 59982, false }, - { 59995, true }, - { 60001, true }, - { 60011, true }, - { 60020, true }, - { 60034, true }, - { 60044, true }, - { 60060, true }, - { 60070, true }, - { 60083, true }, - { 60096, true }, - { 60108, true }, - { 60124, true }, - { 60135, true }, - { 60147, true }, - { 60162, true }, - { 60179, true }, - { 60190, true }, - { 60202, true }, - { 60218, false }, - { 60233, true }, + { 59924, true }, + { 59936, true }, + { 59947, false }, + { 59960, true }, + { 59966, true }, + { 59976, true }, + { 59985, true }, + { 59999, true }, + { 60009, true }, + { 60025, true }, + { 60035, true }, + { 60048, true }, + { 60061, true }, + { 60073, true }, + { 60089, true }, + { 60100, true }, + { 60112, true }, + { 60127, true }, + { 60144, true }, + { 60155, true }, + { 60167, true }, + { 60183, false }, + { 60198, true }, + { 60208, true }, + { 60227, true }, { 60243, true }, - { 60262, true }, - { 60278, true }, - { 60290, true }, - { 60301, true }, - { 60318, true }, - { 60337, true }, - { 60360, true }, - { 60377, true }, - { 60390, true }, - { 60399, false }, - { 60408, true }, - { 60419, true }, - { 60436, true }, - { 60452, true }, - { 60466, true }, + { 60255, true }, + { 60266, true }, + { 60283, true }, + { 60302, true }, + { 60325, true }, + { 60342, true }, + { 60355, true }, + { 60364, false }, + { 60373, true }, + { 60384, true }, + { 60401, true }, + { 60417, true }, + { 60431, true }, + { 60445, true }, + { 60463, false }, + { 60471, true }, { 60480, true }, - { 60498, false }, - { 60506, true }, - { 60515, true }, - { 60528, true }, - { 60545, true }, - { 60555, true }, - { 60567, true }, - { 60577, true }, - { 60625, true }, - { 60669, true }, - { 60707, true }, - { 60746, true }, - { 60786, true }, - { 60830, true }, - { 60866, true }, - { 60907, true }, - { 60944, true }, - { 60988, true }, - { 61015, true }, - { 61027, true }, - { 61036, true }, - { 61044, false }, - { 61054, true }, - { 61060, true }, - { 61068, true }, - { 61077, true }, - { 61099, true }, - { 61106, true }, - { 61117, true }, - { 61129, true }, - { 61138, true }, - { 61153, true }, - { 61163, true }, - { 61172, true }, - { 61183, true }, - { 61195, true }, - { 61208, true }, - { 61224, true }, - { 61245, true }, - { 61256, true }, - { 61270, true }, - { 61287, true }, + { 60493, true }, + { 60510, true }, + { 60520, true }, + { 60532, true }, + { 60542, true }, + { 60590, true }, + { 60634, true }, + { 60672, true }, + { 60711, true }, + { 60751, true }, + { 60795, true }, + { 60831, true }, + { 60872, true }, + { 60909, true }, + { 60953, true }, + { 60980, true }, + { 60992, true }, + { 61001, true }, + { 61009, false }, + { 61019, true }, + { 61025, true }, + { 61033, true }, + { 61042, true }, + { 61064, true }, + { 61071, true }, + { 61082, true }, + { 61094, true }, + { 61103, true }, + { 61118, true }, + { 61128, true }, + { 61137, true }, + { 61148, true }, + { 61160, true }, + { 61173, true }, + { 61189, true }, + { 61210, true }, + { 61221, true }, + { 61235, true }, + { 61252, true }, + { 61269, true }, + { 61281, true }, { 61304, true }, - { 61316, true }, - { 61339, true }, - { 61353, true }, - { 61368, true }, - { 61379, true }, - { 61395, true }, - { 61406, true }, - { 61435, true }, - { 61451, true }, - { 61479, true }, - { 61495, true }, - { 61507, false }, - { 61525, false }, - { 61533, false }, - { 61544, true }, - { 61554, true }, + { 61318, true }, + { 61333, true }, + { 61344, true }, + { 61360, true }, + { 61371, true }, + { 61400, true }, + { 61416, true }, + { 61444, true }, + { 61460, true }, + { 61472, false }, + { 61490, false }, + { 61498, false }, + { 61509, true }, + { 61519, true }, + { 61540, true }, + { 61550, true }, + { 61560, true }, { 61575, true }, - { 61585, true }, - { 61595, true }, - { 61610, true }, - { 61624, true }, - { 61637, true }, - { 61647, true }, + { 61589, true }, + { 61602, true }, + { 61612, true }, + { 61627, true }, + { 61638, true }, + { 61650, true }, { 61662, true }, - { 61673, true }, - { 61685, true }, - { 61697, true }, - { 61706, true }, - { 61715, false }, - { 61727, true }, - { 61743, true }, + { 61671, true }, + { 61680, false }, + { 61692, true }, + { 61708, true }, + { 61719, true }, + { 61735, true }, { 61754, true }, { 61770, true }, - { 61789, true }, - { 61805, true }, - { 61820, true }, - { 61841, true }, - { 61872, true }, - { 61896, true }, - { 61915, true }, - { 61935, true }, - { 61952, true }, - { 61969, true }, - { 61985, true }, - { 62000, true }, - { 62019, true }, - { 62041, true }, - { 62063, true }, - { 62085, true }, - { 62102, true }, - { 62117, true }, - { 62136, true }, - { 62149, true }, - { 62164, true }, - { 62179, true }, - { 62192, true }, - { 62208, true }, - { 62220, true }, - { 62233, false }, - { 62243, false }, - { 62252, true }, - { 62274, true }, - { 62294, true }, - { 62315, true }, - { 62330, true }, - { 62341, true }, - { 62362, true }, - { 62378, true }, - { 62402, false }, + { 61785, true }, + { 61806, true }, + { 61837, true }, + { 61861, true }, + { 61880, true }, + { 61900, true }, + { 61917, true }, + { 61933, true }, + { 61948, true }, + { 61967, true }, + { 61989, true }, + { 62011, true }, + { 62033, true }, + { 62050, true }, + { 62065, true }, + { 62084, true }, + { 62097, true }, + { 62112, true }, + { 62127, true }, + { 62140, true }, + { 62156, true }, + { 62168, true }, + { 62181, false }, + { 62191, false }, + { 62200, true }, + { 62222, true }, + { 62242, true }, + { 62263, true }, + { 62278, true }, + { 62289, true }, + { 62310, true }, + { 62326, true }, + { 62350, false }, + { 62367, true }, + { 62380, true }, + { 62393, true }, + { 62406, true }, { 62419, true }, - { 62432, true }, - { 62445, true }, + { 62438, true }, + { 62449, true }, { 62458, true }, - { 62471, true }, + { 62467, true }, + { 62477, true }, { 62490, true }, - { 62501, true }, - { 62510, true }, - { 62519, true }, - { 62529, true }, - { 62542, true }, - { 62552, true }, - { 62561, true }, - { 62577, true }, - { 62593, true }, - { 62620, true }, - { 62631, true }, - { 62648, true }, - { 62661, true }, - { 62675, true }, - { 62692, true }, - { 62707, true }, - { 62730, true }, - { 62740, true }, - { 62755, true }, - { 62765, true }, - { 62785, true }, - { 62810, true }, - { 62834, true }, - { 62843, true }, - { 62860, true }, - { 62881, true }, - { 62901, true }, - { 62913, true }, - { 62926, true }, - { 62940, true }, - { 62957, false }, - { 62970, true }, - { 62987, true }, - { 62996, true }, - { 63007, true }, - { 63021, true }, - { 63032, true }, - { 63046, true }, - { 63063, true }, - { 63072, true }, - { 63086, false }, - { 63114, true }, - { 63123, true }, - { 63133, true }, - { 63149, true }, - { 63159, true }, - { 63173, false }, - { 63187, false }, - { 63202, true }, - { 63226, true }, - { 63247, true }, - { 63261, true }, - { 63271, true }, - { 63283, true }, + { 62500, true }, + { 62509, true }, + { 62525, true }, + { 62541, true }, + { 62568, true }, + { 62579, true }, + { 62596, true }, + { 62609, true }, + { 62623, true }, + { 62640, true }, + { 62655, true }, + { 62678, true }, + { 62688, true }, + { 62703, true }, + { 62713, true }, + { 62733, true }, + { 62758, true }, + { 62782, true }, + { 62791, true }, + { 62808, true }, + { 62829, true }, + { 62849, true }, + { 62861, true }, + { 62874, true }, + { 62888, true }, + { 62905, false }, + { 62918, true }, + { 62935, true }, + { 62944, true }, + { 62955, true }, + { 62969, true }, + { 62980, true }, + { 62994, true }, + { 63011, true }, + { 63020, true }, + { 63034, false }, + { 63062, true }, + { 63071, true }, + { 63081, true }, + { 63097, true }, + { 63107, true }, + { 63121, false }, + { 63135, false }, + { 63150, true }, + { 63174, true }, + { 63195, true }, + { 63217, true }, + { 63231, true }, + { 63241, true }, + { 63253, true }, + { 63272, true }, + { 63289, true }, { 63302, true }, - { 63319, true }, - { 63332, true }, - { 63344, true }, - { 63357, true }, - { 63369, true }, - { 63381, false }, - { 63405, true }, - { 63418, true }, - { 63428, true }, - { 63447, true }, - { 63471, true }, - { 63487, true }, - { 63497, true }, - { 63513, true }, - { 63529, true }, - { 63548, true }, - { 63566, true }, - { 63583, true }, - { 63600, true }, - { 63608, false }, - { 63634, true }, - { 63651, true }, - { 63665, true }, - { 63676, true }, - { 63688, true }, - { 63708, true }, - { 63724, true }, - { 63742, true }, - { 63752, true }, - { 63764, true }, - { 63779, true }, - { 63797, true }, - { 63815, true }, - { 63834, true }, - { 63844, true }, - { 63858, true }, + { 63314, true }, + { 63327, true }, + { 63339, true }, + { 63351, false }, + { 63375, true }, + { 63388, true }, + { 63398, true }, + { 63417, true }, + { 63441, true }, + { 63457, true }, + { 63467, true }, + { 63483, true }, + { 63499, true }, + { 63518, true }, + { 63536, true }, + { 63553, true }, + { 63570, true }, + { 63578, false }, + { 63604, true }, + { 63621, true }, + { 63635, true }, + { 63646, true }, + { 63658, true }, + { 63678, true }, + { 63694, true }, + { 63712, true }, + { 63722, true }, + { 63734, true }, + { 63749, true }, + { 63767, true }, + { 63785, true }, + { 63804, true }, + { 63814, true }, + { 63828, true }, + { 63838, true }, + { 63849, true }, { 63868, true }, - { 63879, true }, - { 63898, true }, - { 63914, true }, - { 63933, true }, - { 63945, true }, - { 63956, true }, - { 63966, true }, - { 63982, true }, - { 63995, true }, - { 64019, true }, - { 64043, true }, - { 64058, true }, - { 64078, true }, - { 64091, false }, - { 64103, true }, - { 64113, true }, + { 63884, true }, + { 63903, true }, + { 63915, true }, + { 63926, true }, + { 63936, true }, + { 63952, true }, + { 63965, true }, + { 63989, true }, + { 64013, true }, + { 64028, true }, + { 64048, true }, + { 64061, false }, + { 64073, true }, + { 64083, true }, + { 64098, true }, + { 64118, true }, { 64128, true }, - { 64148, true }, - { 64158, true }, - { 64168, false }, - { 64185, true }, - { 64193, true }, - { 64209, true }, - { 64224, true }, + { 64138, false }, + { 64155, true }, + { 64163, true }, + { 64179, true }, + { 64194, true }, + { 64210, true }, + { 64226, true }, { 64240, true }, - { 64256, true }, - { 64270, true }, - { 64284, true }, - { 64298, true }, - { 64310, true }, - { 64330, true }, - { 64346, true }, - { 64363, true }, - { 64373, true }, - { 64386, true }, - { 64397, true }, - { 64411, true }, - { 64424, true }, - { 64432, true }, - { 64442, true }, - { 64456, true }, - { 64468, true }, - { 64484, true }, - { 64495, true }, - { 64519, true }, - { 64544, true }, - { 64557, true }, - { 64570, true }, - { 64582, true }, - { 64601, true }, - { 64616, true }, - { 64629, true }, - { 64642, true }, - { 64655, true }, - { 64675, true }, - { 64690, true }, - { 64701, true }, - { 64719, true }, - { 64728, true }, - { 64739, true }, - { 64750, true }, - { 64761, true }, - { 64772, true }, - { 64782, true }, - { 64794, true }, - { 64804, true }, - { 64818, true }, - { 64828, true }, - { 64840, true }, - { 64849, true }, - { 64860, false }, - { 64873, true }, - { 64895, true }, - { 64902, true }, + { 64254, true }, + { 64268, true }, + { 64280, true }, + { 64300, true }, + { 64316, true }, + { 64333, true }, + { 64343, true }, + { 64356, true }, + { 64367, true }, + { 64381, true }, + { 64394, true }, + { 64402, true }, + { 64412, true }, + { 64426, true }, + { 64438, true }, + { 64454, true }, + { 64465, true }, + { 64489, true }, + { 64514, true }, + { 64527, true }, + { 64540, true }, + { 64552, true }, + { 64571, true }, + { 64586, true }, + { 64599, true }, + { 64612, true }, + { 64625, true }, + { 64645, true }, + { 64660, true }, + { 64671, true }, + { 64689, true }, + { 64698, true }, + { 64709, true }, + { 64720, true }, + { 64731, true }, + { 64742, true }, + { 64752, true }, + { 64766, true }, + { 64778, true }, + { 64788, true }, + { 64802, true }, + { 64812, true }, + { 64824, true }, + { 64833, true }, + { 64844, false }, + { 64857, true }, + { 64879, true }, + { 64886, true }, + { 64898, true }, { 64914, true }, - { 64930, true }, - { 64947, true }, - { 64969, true }, - { 64982, false }, - { 65002, true }, - { 65015, true }, - { 65027, true }, - { 65040, true }, - { 65055, true }, - { 65074, true }, - { 65085, true }, - { 65109, false }, - { 65130, true }, - { 65140, true }, - { 65149, true }, - { 65164, true }, - { 65177, true }, - { 65188, true }, - { 65201, true }, - { 65214, true }, - { 65223, true }, - { 65235, true }, - { 65244, true }, - { 65253, true }, - { 65267, true }, - { 65285, true }, - { 65307, true }, - { 65327, false }, - { 65352, true }, - { 65365, true }, - { 65374, true }, - { 65395, true }, - { 65416, true }, - { 65426, true }, - { 65438, true }, + { 64931, true }, + { 64953, true }, + { 64966, false }, + { 64986, true }, + { 64999, true }, + { 65011, true }, + { 65024, true }, + { 65039, true }, + { 65058, true }, + { 65069, true }, + { 65093, false }, + { 65114, true }, + { 65124, true }, + { 65133, true }, + { 65148, true }, + { 65161, true }, + { 65172, true }, + { 65185, true }, + { 65198, true }, + { 65207, true }, + { 65219, true }, + { 65228, true }, + { 65237, true }, + { 65251, true }, + { 65269, true }, + { 65291, true }, + { 65311, false }, + { 65336, true }, + { 65349, true }, + { 65358, true }, + { 65379, true }, + { 65400, true }, + { 65410, true }, + { 65422, true }, + { 65447, true }, { 65463, true }, - { 65479, true }, - { 65490, true }, - { 65503, true }, - { 65518, true }, - { 65532, true }, - { 65541, true }, - { 65559, true }, - { 65593, true }, - { 65603, true }, - { 65621, true }, - { 65632, true }, - { 65658, false }, - { 65673, true }, - { 65683, true }, - { 65692, true }, - { 65704, true }, - { 65714, true }, - { 65723, true }, - { 65737, false }, + { 65474, true }, + { 65487, true }, + { 65502, true }, + { 65516, true }, + { 65525, true }, + { 65543, true }, + { 65577, true }, + { 65587, true }, + { 65605, true }, + { 65616, true }, + { 65642, false }, + { 65657, true }, + { 65667, true }, + { 65676, true }, + { 65688, true }, + { 65698, true }, + { 65707, true }, + { 65721, false }, + { 65732, true }, + { 65740, true }, { 65748, true }, - { 65756, true }, - { 65764, true }, - { 65775, true }, - { 65784, true }, - { 65799, true }, - { 65811, true }, - { 65825, true }, - { 65839, true }, - { 65859, true }, - { 65871, true }, + { 65759, true }, + { 65768, true }, + { 65783, true }, + { 65795, true }, + { 65809, true }, + { 65823, true }, + { 65843, true }, + { 65855, true }, + { 65873, true }, { 65889, true }, - { 65905, true }, - { 65919, true }, - { 65936, true }, - { 65949, true }, - { 65959, true }, - { 65973, true }, - { 65985, true }, - { 65999, true }, - { 66012, true }, - { 66025, true }, - { 66038, true }, - { 66049, true }, + { 65903, true }, + { 65920, true }, + { 65933, true }, + { 65943, true }, + { 65957, false }, + { 65969, true }, + { 65983, true }, + { 65996, true }, + { 66009, true }, + { 66022, true }, + { 66033, true }, + { 66043, true }, + { 66050, true }, { 66059, true }, - { 66066, true }, - { 66075, true }, - { 66099, true }, - { 66118, true }, - { 66132, true }, - { 66146, true }, - { 66154, true }, + { 66083, true }, + { 66102, true }, + { 66116, true }, + { 66130, true }, + { 66138, true }, + { 66151, true }, { 66167, true }, - { 66183, true }, - { 66206, true }, - { 66215, true }, - { 66229, true }, - { 66244, true }, - { 66258, true }, - { 66272, true }, - { 66286, true }, - { 66300, true }, - { 66314, true }, - { 66328, true }, - { 66342, true }, - { 66359, true }, - { 66379, true }, - { 66391, true }, - { 66406, true }, - { 66425, true }, - { 66439, true }, - { 66457, true }, - { 66475, true }, - { 66482, true }, - { 66496, true }, - { 66508, true }, - { 66525, true }, - { 66543, true }, - { 66562, true }, - { 66572, true }, - { 66592, true }, - { 66605, true }, - { 66615, true }, - { 66629, false }, - { 66646, true }, - { 66659, true }, - { 66672, true }, - { 66685, true }, - { 66695, true }, - { 66707, true }, - { 66719, true }, - { 66732, false }, - { 66747, true }, - { 66760, true }, - { 66773, true }, - { 66787, true }, - { 66804, true }, - { 66816, true }, - { 66835, true }, - { 66842, true }, - { 66854, true }, - { 66866, true }, - { 66875, true }, - { 66886, true }, - { 66900, true }, - { 66913, true }, - { 66938, true }, - { 66961, false }, - { 66971, true }, - { 66982, true }, - { 66995, true }, - { 67006, true }, - { 67015, true }, - { 67025, true }, - { 67036, true }, - { 67056, true }, - { 67076, true }, - { 67094, true }, - { 67113, true }, - { 67136, true }, - { 67154, true }, - { 67171, true }, - { 67183, true }, - { 67197, true }, - { 67220, true }, - { 67230, true }, - { 67245, true }, + { 66190, true }, + { 66199, true }, + { 66213, true }, + { 66228, true }, + { 66242, true }, + { 66256, true }, + { 66270, true }, + { 66284, true }, + { 66298, true }, + { 66312, true }, + { 66326, true }, + { 66343, true }, + { 66363, true }, + { 66375, true }, + { 66390, true }, + { 66409, true }, + { 66423, true }, + { 66441, true }, + { 66459, true }, + { 66466, true }, + { 66480, true }, + { 66492, true }, + { 66509, true }, + { 66527, true }, + { 66546, true }, + { 66556, true }, + { 66576, true }, + { 66589, true }, + { 66599, true }, + { 66613, false }, + { 66630, true }, + { 66643, true }, + { 66656, true }, + { 66669, true }, + { 66679, true }, + { 66691, true }, + { 66703, true }, + { 66716, false }, + { 66731, true }, + { 66744, true }, + { 66757, true }, + { 66771, true }, + { 66788, true }, + { 66800, true }, + { 66819, true }, + { 66826, true }, + { 66838, true }, + { 66850, true }, + { 66859, true }, + { 66870, true }, + { 66884, true }, + { 66897, true }, + { 66922, true }, + { 66945, false }, + { 66955, true }, + { 66966, true }, + { 66979, true }, + { 66990, true }, + { 66999, true }, + { 67009, true }, + { 67020, true }, + { 67040, true }, + { 67060, true }, + { 67078, true }, + { 67097, true }, + { 67120, true }, + { 67138, true }, + { 67155, true }, + { 67167, true }, + { 67181, true }, + { 67204, true }, + { 67214, true }, + { 67229, true }, + { 67243, true }, { 67259, true }, - { 67275, true }, - { 67288, true }, - { 67296, true }, - { 67308, true }, - { 67322, true }, - { 67344, true }, - { 67351, true }, - { 67364, true }, - { 67384, true }, - { 67402, true }, - { 67424, true }, - { 67437, true }, - { 67452, true }, - { 67463, true }, - { 67477, true }, - { 67490, true }, - { 67503, true }, - { 67522, true }, - { 67538, true }, - { 67557, true }, - { 67576, true }, - { 67591, true }, - { 67603, true }, - { 67610, true }, - { 67626, true }, - { 67653, true }, - { 67681, true }, - { 67705, true }, - { 67724, true }, - { 67741, true }, - { 67762, true }, - { 67781, true }, - { 67799, true }, - { 67817, true }, - { 67829, true }, - { 67838, true }, - { 67861, true }, - { 67875, true }, - { 67888, true }, - { 67900, true }, - { 67910, true }, - { 67921, false }, - { 67931, true }, - { 67951, true }, - { 67964, true }, - { 67979, true }, - { 67988, true }, - { 68000, true }, - { 68016, true }, - { 68026, true }, - { 68033, true }, - { 68050, true }, - { 68063, true }, - { 68072, true }, - { 68085, true }, - { 68098, true }, - { 68116, true }, - { 68132, true }, - { 68148, true }, - { 68159, true }, - { 68173, true }, - { 68190, true }, - { 68200, true }, - { 68227, true }, - { 68262, true }, - { 68288, true }, - { 68300, false }, - { 68313, true }, - { 68326, true }, - { 68345, true }, - { 68370, true }, - { 68392, true }, - { 68407, true }, - { 68427, false }, - { 68437, true }, - { 68456, true }, - { 68473, true }, - { 68490, true }, - { 68500, true }, - { 68510, true }, - { 68523, true }, - { 68538, true }, - { 68551, true }, - { 68566, true }, - { 68582, true }, - { 68595, true }, - { 68608, true }, - { 68622, true }, - { 68637, true }, - { 68649, true }, - { 68662, true }, - { 68681, true }, - { 68705, true }, - { 68727, true }, - { 68748, true }, - { 68773, true }, - { 68796, true }, - { 68816, true }, - { 68827, true }, - { 68839, true }, - { 68851, true }, - { 68871, true }, - { 68888, true }, - { 68909, true }, - { 68932, true }, - { 68948, true }, - { 68968, true }, - { 68983, true }, - { 68993, true }, - { 69010, true }, - { 69021, true }, - { 69040, true }, - { 69050, true }, - { 69060, true }, - { 69068, true }, - { 69082, true }, - { 69095, true }, - { 69108, true }, - { 69117, true }, - { 69124, true }, - { 69131, false }, - { 69147, true }, + { 67272, true }, + { 67280, true }, + { 67292, true }, + { 67306, true }, + { 67328, true }, + { 67335, true }, + { 67348, true }, + { 67361, true }, + { 67381, true }, + { 67399, true }, + { 67421, true }, + { 67434, true }, + { 67449, true }, + { 67460, true }, + { 67474, true }, + { 67487, true }, + { 67500, true }, + { 67519, true }, + { 67535, true }, + { 67554, true }, + { 67573, true }, + { 67588, true }, + { 67600, true }, + { 67607, true }, + { 67623, true }, + { 67650, true }, + { 67678, true }, + { 67702, true }, + { 67721, true }, + { 67738, true }, + { 67759, true }, + { 67778, true }, + { 67796, true }, + { 67814, true }, + { 67826, true }, + { 67835, true }, + { 67858, true }, + { 67872, true }, + { 67885, true }, + { 67897, true }, + { 67907, true }, + { 67918, false }, + { 67928, true }, + { 67948, true }, + { 67961, true }, + { 67976, true }, + { 67985, true }, + { 67997, true }, + { 68013, true }, + { 68023, true }, + { 68030, true }, + { 68047, true }, + { 68060, true }, + { 68069, true }, + { 68082, true }, + { 68095, true }, + { 68113, true }, + { 68129, true }, + { 68145, true }, + { 68156, true }, + { 68170, true }, + { 68187, true }, + { 68197, true }, + { 68224, true }, + { 68259, true }, + { 68285, true }, + { 68297, false }, + { 68310, true }, + { 68323, true }, + { 68342, true }, + { 68367, true }, + { 68389, true }, + { 68404, true }, + { 68424, false }, + { 68434, true }, + { 68453, true }, + { 68470, true }, + { 68487, true }, + { 68497, true }, + { 68507, true }, + { 68520, true }, + { 68535, true }, + { 68548, true }, + { 68563, true }, + { 68579, true }, + { 68592, true }, + { 68605, true }, + { 68619, true }, + { 68634, true }, + { 68646, true }, + { 68659, true }, + { 68678, true }, + { 68702, true }, + { 68724, true }, + { 68745, true }, + { 68770, true }, + { 68793, true }, + { 68813, true }, + { 68824, true }, + { 68836, true }, + { 68848, true }, + { 68868, true }, + { 68885, true }, + { 68906, true }, + { 68929, true }, + { 68945, true }, + { 68965, true }, + { 68980, true }, + { 68990, true }, + { 69007, true }, + { 69018, true }, + { 69037, true }, + { 69047, true }, + { 69057, true }, + { 69065, true }, + { 69078, true }, + { 69091, true }, + { 69100, true }, + { 69107, true }, + { 69114, false }, + { 69130, true }, + { 69139, true }, { 69156, true }, - { 69173, true }, - { 69188, true }, - { 69202, true }, - { 69214, true }, - { 69226, true }, - { 69249, true }, - { 69263, true }, - { 69278, true }, - { 69294, true }, - { 69306, true }, + { 69171, true }, + { 69185, true }, + { 69197, true }, + { 69209, true }, + { 69232, true }, + { 69246, true }, + { 69261, true }, + { 69277, true }, + { 69289, true }, + { 69305, true }, { 69322, true }, - { 69339, true }, - { 69357, true }, + { 69340, true }, + { 69361, true }, { 69378, true }, { 69395, true }, { 69412, true }, { 69429, true }, { 69446, true }, { 69463, true }, - { 69480, true }, - { 69496, true }, - { 69510, true }, - { 69535, true }, - { 69546, true }, - { 69562, true }, - { 69578, true }, - { 69594, true }, - { 69613, false }, - { 69626, true }, - { 69636, false }, - { 69652, true }, - { 69666, true }, - { 69679, true }, - { 69689, true }, - { 69700, true }, - { 69714, true }, - { 69726, true }, - { 69740, true }, - { 69750, false }, - { 69760, true }, - { 69769, true }, - { 69779, true }, - { 69798, true }, - { 69807, true }, - { 69823, false }, - { 69843, true }, - { 69866, true }, - { 69878, true }, - { 69895, true }, - { 69914, true }, - { 69931, false }, - { 69943, true }, - { 69954, false }, - { 69966, true }, - { 69977, true }, + { 69479, true }, + { 69493, true }, + { 69518, true }, + { 69529, true }, + { 69545, true }, + { 69561, true }, + { 69580, false }, + { 69593, true }, + { 69603, false }, + { 69619, true }, + { 69633, true }, + { 69646, true }, + { 69656, true }, + { 69667, true }, + { 69681, true }, + { 69693, true }, + { 69707, true }, + { 69717, false }, + { 69727, true }, + { 69736, true }, + { 69746, true }, + { 69765, true }, + { 69774, true }, + { 69790, false }, + { 69810, true }, + { 69833, true }, + { 69845, true }, + { 69862, true }, + { 69881, true }, + { 69898, false }, + { 69910, true }, + { 69921, false }, + { 69933, true }, + { 69944, true }, + { 69958, true }, + { 69973, true }, { 69991, true }, - { 70006, true }, - { 70024, true }, - { 70034, true }, - { 70042, true }, - { 70056, true }, - { 70069, false }, - { 70082, true }, - { 70097, true }, - { 70111, true }, - { 70126, false }, - { 70140, true }, - { 70152, true }, - { 70166, true }, - { 70180, true }, - { 70190, true }, - { 70206, true }, - { 70222, true }, - { 70241, true }, - { 70260, false }, - { 70289, true }, - { 70303, true }, - { 70317, true }, - { 70338, true }, - { 70353, true }, - { 70366, true }, - { 70384, true }, - { 70404, true }, - { 70416, true }, - { 70431, true }, - { 70454, true }, - { 70478, true }, - { 70502, true }, - { 70526, true }, - { 70536, true }, - { 70550, true }, - { 70572, true }, - { 70604, true }, - { 70615, true }, - { 70623, true }, - { 70633, true }, - { 70645, true }, - { 70660, true }, - { 70674, false }, - { 70694, true }, - { 70705, true }, - { 70723, true }, - { 70732, true }, + { 70001, true }, + { 70009, true }, + { 70023, true }, + { 70036, false }, + { 70049, true }, + { 70064, true }, + { 70078, true }, + { 70093, false }, + { 70107, true }, + { 70119, true }, + { 70133, true }, + { 70147, true }, + { 70157, true }, + { 70173, true }, + { 70189, true }, + { 70208, true }, + { 70227, false }, + { 70256, true }, + { 70270, true }, + { 70284, true }, + { 70305, true }, + { 70320, true }, + { 70333, true }, + { 70351, true }, + { 70371, true }, + { 70383, true }, + { 70398, true }, + { 70421, true }, + { 70445, true }, + { 70469, true }, + { 70493, true }, + { 70503, true }, + { 70517, true }, + { 70539, true }, + { 70571, true }, + { 70582, true }, + { 70590, true }, + { 70600, true }, + { 70612, true }, + { 70627, true }, + { 70641, false }, + { 70661, true }, + { 70672, true }, + { 70690, true }, + { 70699, true }, + { 70706, true }, + { 70717, true }, + { 70726, true }, { 70739, true }, - { 70750, true }, - { 70759, true }, - { 70772, true }, - { 70790, true }, - { 70813, true }, - { 70828, false }, - { 70839, false }, - { 70850, true }, - { 70876, false }, - { 70892, true }, - { 70902, true }, + { 70757, true }, + { 70780, true }, + { 70795, false }, + { 70806, false }, + { 70818, false }, + { 70829, true }, + { 70855, false }, + { 70871, true }, + { 70881, true }, + { 70889, true }, + { 70898, true }, { 70910, true }, - { 70919, true }, - { 70931, true }, - { 70943, false }, - { 70955, true }, - { 70968, true }, - { 70982, true }, - { 70994, true }, - { 71011, true }, - { 71031, true }, - { 71042, true }, - { 71058, true }, - { 71070, true }, - { 71087, true }, - { 71096, true }, - { 71109, true }, - { 71122, true }, - { 71140, true }, - { 71153, true }, - { 71177, true }, - { 71191, true }, - { 71208, true }, - { 71223, true }, - { 71235, true }, - { 71247, true }, - { 71262, true }, - { 71279, true }, - { 71287, true }, - { 71306, true }, - { 71323, true }, - { 71340, true }, - { 71355, true }, - { 71367, true }, - { 71392, true }, - { 71407, false }, - { 71420, false }, - { 71432, true }, - { 71452, true }, - { 71465, true }, - { 71483, true }, - { 71495, true }, - { 71519, true }, - { 71532, true }, - { 71551, true }, - { 71563, true }, - { 71575, true }, + { 70922, false }, + { 70934, true }, + { 70947, true }, + { 70961, true }, + { 70973, true }, + { 70990, true }, + { 71010, true }, + { 71021, true }, + { 71037, true }, + { 71049, true }, + { 71066, true }, + { 71075, true }, + { 71088, true }, + { 71101, true }, + { 71119, true }, + { 71132, true }, + { 71156, true }, + { 71170, true }, + { 71187, true }, + { 71202, true }, + { 71214, true }, + { 71226, true }, + { 71241, true }, + { 71258, true }, + { 71266, true }, + { 71285, true }, + { 71302, true }, + { 71319, true }, + { 71334, true }, + { 71346, true }, + { 71371, true }, + { 71386, false }, + { 71399, false }, + { 71411, true }, + { 71431, true }, + { 71444, true }, + { 71462, true }, + { 71474, true }, + { 71498, true }, + { 71511, true }, + { 71530, true }, + { 71542, true }, + { 71554, true }, + { 71578, true }, { 71599, true }, - { 71620, true }, - { 71634, true }, - { 71648, true }, - { 71661, false }, - { 71677, true }, - { 71689, true }, - { 71702, true }, - { 71720, true }, + { 71613, true }, + { 71627, true }, + { 71640, false }, + { 71656, true }, + { 71668, true }, + { 71681, true }, + { 71699, true }, + { 71708, true }, + { 71718, true }, { 71729, true }, - { 71739, true }, - { 71750, true }, + { 71741, true }, + { 71751, true }, { 71762, true }, - { 71772, true }, + { 71774, true }, { 71783, true }, - { 71795, true }, { 71804, true }, { 71825, true }, - { 71846, true }, - { 71856, true }, - { 71870, true }, - { 71882, true }, - { 71898, true }, - { 71920, true }, - { 71939, true }, - { 71958, true }, - { 71968, false }, - { 71982, true }, + { 71835, true }, + { 71849, true }, + { 71861, true }, + { 71877, true }, + { 71899, true }, + { 71918, true }, + { 71937, true }, + { 71947, false }, + { 71961, true }, + { 71974, true }, { 71995, true }, - { 72016, true }, - { 72029, true }, - { 72042, true }, - { 72050, false }, - { 72067, true }, - { 72081, true }, - { 72097, true }, - { 72116, true }, - { 72135, true }, - { 72145, true }, - { 72159, true }, - { 72167, true }, - { 72181, true }, - { 72200, false }, - { 72218, true }, - { 72227, true }, - { 72240, true }, - { 72255, true }, - { 72275, true }, - { 72292, true }, - { 72305, true }, - { 72318, true }, - { 72342, true }, - { 72369, true }, - { 72382, false }, - { 72396, true }, - { 72408, true }, - { 72421, true }, - { 72433, true }, - { 72448, true }, - { 72466, true }, - { 72479, true }, - { 72502, true }, - { 72525, false }, - { 72536, true }, - { 72552, true }, - { 72570, true }, - { 72590, true }, - { 72612, true }, - { 72628, true }, - { 72645, true }, - { 72662, true }, - { 72679, true }, - { 72697, true }, - { 72710, true }, - { 72727, true }, - { 72742, true }, - { 72756, true }, - { 72767, true }, - { 72783, true }, - { 72792, true }, - { 72811, true }, - { 72819, true }, - { 72828, true }, - { 72839, true }, - { 72854, true }, - { 72869, true }, - { 72887, true }, - { 72904, false }, - { 72915, true }, - { 72931, true }, - { 72945, true }, - { 72957, true }, - { 72965, true }, - { 72985, true }, - { 72995, true }, - { 73004, true }, - { 73020, true }, - { 73030, true }, - { 73036, true }, - { 73048, true }, - { 73070, true }, - { 73084, true }, - { 73099, true }, - { 73110, true }, - { 73123, true }, - { 73139, true }, - { 73157, false }, - { 73170, true }, - { 73184, true }, - { 73193, true }, - { 73204, true }, - { 73215, true }, - { 73226, true }, - { 73238, true }, - { 73257, true }, - { 73265, true }, - { 73282, true }, - { 73291, true }, - { 73300, true }, - { 73319, true }, - { 73330, true }, - { 73346, true }, - { 73353, true }, + { 72008, true }, + { 72021, true }, + { 72029, false }, + { 72046, true }, + { 72060, true }, + { 72076, true }, + { 72095, true }, + { 72114, true }, + { 72124, true }, + { 72138, true }, + { 72146, true }, + { 72160, true }, + { 72179, false }, + { 72197, true }, + { 72206, true }, + { 72219, true }, + { 72234, true }, + { 72254, true }, + { 72271, true }, + { 72284, true }, + { 72297, true }, + { 72321, true }, + { 72348, true }, + { 72361, false }, + { 72375, true }, + { 72387, true }, + { 72400, true }, + { 72412, true }, + { 72427, true }, + { 72445, true }, + { 72458, true }, + { 72481, true }, + { 72504, false }, + { 72515, true }, + { 72531, true }, + { 72549, true }, + { 72569, true }, + { 72591, true }, + { 72607, true }, + { 72624, true }, + { 72641, true }, + { 72658, true }, + { 72676, true }, + { 72689, true }, + { 72706, true }, + { 72721, true }, + { 72735, true }, + { 72746, true }, + { 72762, true }, + { 72771, true }, + { 72790, true }, + { 72798, true }, + { 72807, true }, + { 72818, true }, + { 72833, true }, + { 72848, true }, + { 72866, true }, + { 72883, false }, + { 72894, true }, + { 72910, true }, + { 72924, true }, + { 72936, true }, + { 72944, true }, + { 72964, true }, + { 72974, true }, + { 72983, true }, + { 72999, true }, + { 73009, true }, + { 73015, true }, + { 73027, true }, + { 73049, true }, + { 73063, true }, + { 73078, true }, + { 73089, true }, + { 73102, true }, + { 73118, true }, + { 73136, false }, + { 73149, true }, + { 73163, true }, + { 73172, true }, + { 73183, true }, + { 73194, true }, + { 73205, true }, + { 73217, true }, + { 73236, true }, + { 73244, true }, + { 73261, true }, + { 73270, true }, + { 73279, true }, + { 73298, true }, + { 73309, true }, + { 73325, true }, + { 73332, true }, + { 73344, true }, { 73365, true }, - { 73386, true }, - { 73403, true }, - { 73416, true }, - { 73427, true }, - { 73452, true }, - { 73467, true }, - { 73486, false }, - { 73500, true }, - { 73511, true }, - { 73526, true }, - { 73538, true }, - { 73549, true }, - { 73564, true }, - { 73580, true }, - { 73594, true }, - { 73608, true }, - { 73628, true }, - { 73637, true }, - { 73648, true }, - { 73668, false }, - { 73692, true }, - { 73703, false }, - { 73711, true }, - { 73729, true }, - { 73747, true }, - { 73769, true }, - { 73791, true }, - { 73816, true }, - { 73832, true }, - { 73844, true }, + { 73382, true }, + { 73395, true }, + { 73406, true }, + { 73431, true }, + { 73446, true }, + { 73465, false }, + { 73479, true }, + { 73490, true }, + { 73505, true }, + { 73517, true }, + { 73528, true }, + { 73543, true }, + { 73559, true }, + { 73573, true }, + { 73587, true }, + { 73607, true }, + { 73616, true }, + { 73627, true }, + { 73647, false }, + { 73671, true }, + { 73682, false }, + { 73690, true }, + { 73708, true }, + { 73726, true }, + { 73748, true }, + { 73770, true }, + { 73795, true }, + { 73811, true }, + { 73823, true }, + { 73835, true }, { 73856, true }, - { 73877, true }, - { 73891, true }, - { 73904, false }, - { 73921, true }, - { 73930, true }, - { 73952, true }, - { 73972, true }, - { 73999, true }, - { 74018, true }, - { 74030, true }, - { 74050, true }, - { 74058, true }, - { 74067, true }, - { 74084, true }, - { 74099, true }, - { 74114, true }, - { 74143, true }, - { 74165, true }, - { 74183, true }, - { 74197, true }, - { 74212, true }, - { 74225, true }, - { 74235, true }, - { 74251, true }, - { 74269, true }, - { 74287, false }, - { 74295, true }, - { 74302, false }, - { 74322, true }, - { 74331, true }, - { 74346, true }, - { 74364, true }, - { 74376, true }, - { 74385, false }, - { 74395, true }, + { 73870, true }, + { 73883, false }, + { 73900, true }, + { 73909, true }, + { 73931, true }, + { 73951, true }, + { 73978, true }, + { 73997, true }, + { 74009, true }, + { 74029, true }, + { 74037, true }, + { 74046, true }, + { 74063, true }, + { 74078, true }, + { 74093, true }, + { 74122, true }, + { 74144, true }, + { 74162, true }, + { 74176, true }, + { 74191, true }, + { 74204, true }, + { 74214, true }, + { 74230, true }, + { 74248, true }, + { 74266, false }, + { 74274, true }, + { 74281, false }, + { 74301, true }, + { 74310, true }, + { 74325, true }, + { 74343, true }, + { 74355, true }, + { 74364, false }, + { 74374, true }, + { 74382, true }, { 74403, true }, - { 74424, true }, - { 74438, true }, + { 74417, true }, + { 74434, true }, + { 74445, true }, { 74455, true }, - { 74466, true }, - { 74476, true }, - { 74493, true }, - { 74515, true }, - { 74530, true }, - { 74547, true }, - { 74557, true }, - { 74570, true }, - { 74585, true }, + { 74472, true }, + { 74494, true }, + { 74509, true }, + { 74526, true }, + { 74536, true }, + { 74551, true }, + { 74567, true }, + { 74579, true }, { 74601, true }, - { 74613, true }, - { 74635, true }, - { 74648, true }, - { 74659, true }, - { 74675, true }, - { 74691, true }, - { 74701, true }, - { 74713, true }, - { 74721, true }, - { 74740, true }, - { 74759, true }, - { 74772, true }, - { 74789, true }, - { 74801, true }, - { 74815, true }, - { 74829, true }, - { 74841, true }, - { 74854, true }, - { 74868, true }, - { 74893, true }, - { 74907, true }, - { 74929, true }, - { 74945, true }, - { 74964, true }, - { 74977, true }, - { 74994, true }, - { 75012, true }, + { 74614, true }, + { 74625, true }, + { 74641, true }, + { 74657, true }, + { 74667, true }, + { 74679, true }, + { 74687, true }, + { 74706, true }, + { 74725, true }, + { 74738, true }, + { 74755, true }, + { 74767, true }, + { 74781, true }, + { 74795, true }, + { 74807, true }, + { 74820, true }, + { 74834, true }, + { 74859, true }, + { 74873, true }, + { 74895, true }, + { 74911, true }, + { 74930, true }, + { 74943, true }, + { 74960, true }, + { 74978, true }, + { 74993, true }, + { 75008, true }, { 75027, true }, - { 75042, true }, - { 75061, true }, - { 75074, true }, - { 75099, true }, - { 75112, true }, - { 75124, true }, - { 75135, true }, - { 75149, true }, - { 75162, true }, - { 75180, true }, - { 75199, true }, - { 75213, true }, - { 75229, true }, - { 75241, true }, - { 75253, true }, - { 75269, true }, - { 75282, true }, - { 75298, true }, - { 75309, true }, - { 75324, true }, - { 75339, true }, - { 75353, true }, - { 75371, true }, - { 75396, true }, - { 75415, true }, - { 75428, true }, - { 75438, true }, + { 75040, true }, + { 75065, true }, + { 75078, true }, + { 75090, true }, + { 75101, true }, + { 75115, true }, + { 75128, true }, + { 75146, true }, + { 75165, true }, + { 75179, true }, + { 75195, true }, + { 75207, true }, + { 75219, true }, + { 75235, true }, + { 75248, true }, + { 75264, true }, + { 75275, true }, + { 75290, true }, + { 75305, true }, + { 75319, true }, + { 75337, true }, + { 75362, true }, + { 75381, true }, + { 75394, true }, + { 75404, true }, + { 75416, true }, + { 75426, true }, + { 75442, true }, { 75450, true }, - { 75460, true }, - { 75476, true }, - { 75484, true }, - { 75492, true }, - { 75505, true }, - { 75516, true }, - { 75527, true }, - { 75543, true }, - { 75554, true }, - { 75566, true }, - { 75576, true }, - { 75593, true }, - { 75611, false }, - { 75624, true }, - { 75637, true }, - { 75646, true }, - { 75661, true }, - { 75678, true }, + { 75458, true }, + { 75471, true }, + { 75482, true }, + { 75493, true }, + { 75509, true }, + { 75520, true }, + { 75532, true }, + { 75542, true }, + { 75559, true }, + { 75577, false }, + { 75590, true }, + { 75603, true }, + { 75612, true }, + { 75627, true }, + { 75644, true }, + { 75658, true }, + { 75676, true }, { 75692, true }, + { 75701, true }, { 75710, true }, - { 75726, true }, + { 75725, true }, { 75735, true }, - { 75744, true }, - { 75759, true }, - { 75769, true }, - { 75783, true }, - { 75795, true }, - { 75812, true }, - { 75826, true }, - { 75834, true }, - { 75842, true }, - { 75851, true }, - { 75863, false }, - { 75871, true }, - { 75897, true }, - { 75910, true }, + { 75749, true }, + { 75761, true }, + { 75778, true }, + { 75792, true }, + { 75800, true }, + { 75808, true }, + { 75817, true }, + { 75829, false }, + { 75837, true }, + { 75863, true }, + { 75876, true }, + { 75890, true }, + { 75900, true }, + { 75915, true }, { 75924, true }, - { 75934, true }, - { 75949, true }, - { 75958, true }, - { 75969, true }, - { 75980, true }, - { 75991, true }, - { 76006, true }, - { 76019, true }, - { 76031, true }, - { 76044, true }, - { 76052, true }, - { 76066, true }, - { 76081, false }, - { 76095, true }, - { 76116, true }, - { 76127, true }, - { 76141, true }, - { 76159, true }, - { 76170, true }, - { 76184, true }, - { 76200, true }, - { 76215, true }, - { 76228, true }, - { 76242, false }, - { 76258, true }, - { 76269, true }, - { 76288, true }, - { 76311, true }, - { 76320, true }, - { 76334, true }, - { 76345, true }, - { 76356, true }, - { 76365, true }, - { 76383, true }, - { 76401, true }, - { 76420, true }, - { 76430, true }, - { 76443, true }, - { 76454, true }, - { 76463, true }, - { 76480, true }, - { 76500, true }, - { 76514, true }, - { 76522, true }, - { 76530, true }, - { 76540, true }, - { 76547, true }, - { 76560, true }, - { 76571, true }, - { 76585, true }, - { 76599, true }, - { 76613, true }, - { 76623, true }, - { 76633, true }, - { 76646, true }, - { 76656, true }, - { 76668, true }, - { 76675, true }, - { 76685, true }, - { 76694, true }, - { 76709, true }, - { 76716, true }, - { 76732, true }, + { 75935, true }, + { 75946, true }, + { 75957, true }, + { 75972, true }, + { 75985, true }, + { 75997, true }, + { 76010, true }, + { 76018, true }, + { 76032, true }, + { 76047, false }, + { 76061, true }, + { 76082, true }, + { 76093, true }, + { 76107, true }, + { 76125, true }, + { 76136, true }, + { 76150, true }, + { 76166, true }, + { 76179, true }, + { 76194, true }, + { 76207, true }, + { 76221, false }, + { 76237, true }, + { 76248, true }, + { 76267, true }, + { 76290, true }, + { 76299, true }, + { 76313, true }, + { 76324, true }, + { 76335, true }, + { 76344, true }, + { 76362, true }, + { 76380, true }, + { 76399, true }, + { 76409, true }, + { 76422, true }, + { 76433, true }, + { 76442, true }, + { 76459, true }, + { 76479, true }, + { 76493, true }, + { 76501, true }, + { 76509, true }, + { 76519, true }, + { 76526, true }, + { 76539, true }, + { 76550, true }, + { 76564, true }, + { 76578, true }, + { 76592, true }, + { 76602, true }, + { 76612, true }, + { 76625, true }, + { 76635, true }, + { 76647, true }, + { 76654, true }, + { 76664, true }, + { 76673, true }, + { 76688, true }, + { 76695, true }, + { 76711, true }, + { 76723, true }, + { 76733, true }, { 76744, true }, { 76754, true }, - { 76765, true }, - { 76775, true }, + { 76761, true }, + { 76773, true }, { 76782, true }, - { 76794, true }, - { 76803, true }, - { 76812, true }, - { 76826, true }, - { 76844, true }, - { 76866, true }, - { 76879, true }, - { 76888, true }, - { 76902, true }, - { 76914, true }, - { 76924, true }, - { 76946, true }, - { 76969, true }, - { 76984, true }, - { 76999, true }, - { 77017, true }, - { 77027, true }, - { 77046, true }, - { 77065, true }, - { 77083, true }, + { 76791, true }, + { 76805, true }, + { 76823, true }, + { 76845, true }, + { 76858, true }, + { 76867, true }, + { 76881, true }, + { 76893, true }, + { 76903, true }, + { 76925, true }, + { 76948, true }, + { 76963, true }, + { 76978, true }, + { 76996, true }, + { 77006, true }, + { 77025, true }, + { 77044, true }, + { 77062, true }, + { 77082, true }, + { 77092, true }, { 77103, true }, - { 77113, true }, - { 77124, true }, - { 77142, true }, - { 77154, true }, - { 77165, true }, - { 77181, true }, - { 77198, true }, - { 77213, true }, - { 77229, true }, - { 77245, true }, - { 77254, true }, - { 77271, true }, - { 77283, true }, - { 77300, true }, - { 77318, true }, - { 77330, true }, - { 77347, true }, - { 77361, true }, - { 77370, true }, - { 77384, true }, - { 77399, true }, - { 77410, true }, - { 77425, true }, - { 77440, true }, - { 77455, true }, - { 77473, true }, - { 77486, true }, - { 77498, true }, + { 77121, true }, + { 77133, true }, + { 77144, true }, + { 77160, true }, + { 77177, true }, + { 77192, true }, + { 77208, true }, + { 77224, true }, + { 77233, true }, + { 77250, true }, + { 77262, true }, + { 77279, true }, + { 77297, true }, + { 77309, true }, + { 77326, true }, + { 77340, true }, + { 77349, true }, + { 77363, true }, + { 77378, true }, + { 77389, true }, + { 77404, true }, + { 77419, true }, + { 77434, true }, + { 77452, true }, + { 77465, true }, + { 77477, true }, + { 77494, true }, { 77515, true }, - { 77536, true }, - { 77560, true }, - { 77582, true }, - { 77594, true }, - { 77607, true }, - { 77622, true }, - { 77638, true }, - { 77652, true }, - { 77665, true }, + { 77539, true }, + { 77561, true }, + { 77573, true }, + { 77586, true }, + { 77601, true }, + { 77617, true }, + { 77631, true }, + { 77644, true }, + { 77662, true }, { 77683, true }, - { 77704, true }, - { 77717, false }, - { 77738, true }, - { 77756, true }, - { 77769, true }, - { 77784, true }, - { 77798, true }, - { 77809, true }, - { 77834, true }, - { 77850, true }, - { 77867, true }, - { 77884, true }, - { 77896, false }, - { 77913, true }, - { 77926, false }, - { 77937, true }, - { 77952, true }, - { 77964, false }, - { 77975, true }, - { 77989, true }, - { 77999, true }, - { 78018, true }, - { 78027, true }, - { 78034, true }, - { 78045, true }, - { 78054, true }, + { 77696, false }, + { 77717, true }, + { 77735, true }, + { 77748, true }, + { 77763, true }, + { 77777, true }, + { 77788, true }, + { 77813, true }, + { 77829, true }, + { 77846, true }, + { 77863, true }, + { 77875, false }, + { 77892, true }, + { 77905, false }, + { 77916, true }, + { 77931, true }, + { 77943, false }, + { 77954, true }, + { 77968, true }, + { 77978, true }, + { 77997, true }, + { 78006, true }, + { 78013, true }, + { 78024, true }, + { 78033, true }, + { 78050, true }, + { 78062, true }, { 78071, true }, - { 78083, true }, - { 78092, true }, - { 78103, true }, - { 78115, true }, - { 78122, false }, - { 78129, false }, - { 78138, true }, - { 78150, true }, - { 78162, true }, + { 78082, true }, + { 78094, true }, + { 78101, false }, + { 78108, false }, + { 78117, true }, + { 78129, true }, + { 78141, true }, + { 78152, true }, { 78173, true }, - { 78194, true }, - { 78220, true }, - { 78230, true }, - { 78239, true }, - { 78248, true }, - { 78255, true }, - { 78267, false }, - { 78279, false }, - { 78287, true }, - { 78299, true }, - { 78312, true }, - { 78326, false }, - { 78341, true }, - { 78355, true }, - { 78368, true }, - { 78380, true }, - { 78394, true }, + { 78199, true }, + { 78209, true }, + { 78218, true }, + { 78227, true }, + { 78234, true }, + { 78246, false }, + { 78258, false }, + { 78266, true }, + { 78278, true }, + { 78291, true }, + { 78305, false }, + { 78320, true }, + { 78334, true }, + { 78347, true }, + { 78359, true }, + { 78373, true }, + { 78393, true }, + { 78404, true }, { 78414, true }, - { 78425, true }, + { 78422, true }, { 78435, true }, - { 78443, true }, - { 78456, true }, - { 78468, true }, - { 78479, true }, - { 78491, true }, - { 78501, false }, - { 78519, true }, - { 78537, true }, - { 78559, true }, - { 78581, true }, - { 78592, true }, - { 78604, true }, - { 78619, true }, - { 78635, true }, - { 78646, true }, - { 78662, true }, - { 78686, true }, - { 78709, true }, - { 78727, true }, - { 78738, true }, - { 78756, true }, - { 78783, true }, - { 78803, true }, - { 78815, true }, - { 78833, true }, - { 78847, true }, - { 78863, true }, - { 78879, true }, - { 78892, true }, - { 78906, true }, - { 78920, true }, - { 78944, true }, - { 78972, false }, - { 78983, true }, - { 78994, true }, - { 79012, true }, + { 78447, true }, + { 78458, true }, + { 78470, true }, + { 78480, false }, + { 78498, true }, + { 78516, true }, + { 78538, true }, + { 78560, true }, + { 78571, true }, + { 78583, true }, + { 78598, true }, + { 78614, true }, + { 78625, true }, + { 78641, true }, + { 78665, true }, + { 78688, true }, + { 78706, true }, + { 78717, true }, + { 78735, true }, + { 78762, true }, + { 78782, true }, + { 78794, true }, + { 78812, true }, + { 78826, true }, + { 78842, true }, + { 78858, true }, + { 78871, true }, + { 78885, true }, + { 78899, true }, + { 78923, true }, + { 78951, false }, + { 78962, true }, + { 78973, true }, + { 78991, true }, + { 79009, true }, { 79030, true }, { 79051, true }, { 79072, true }, - { 79093, true }, - { 79107, true }, - { 79120, true }, - { 79139, true }, - { 79157, true }, - { 79167, true }, - { 79185, true }, + { 79086, true }, + { 79099, true }, + { 79118, true }, + { 79136, true }, + { 79146, true }, + { 79164, true }, + { 79182, true }, { 79203, true }, - { 79224, true }, - { 79244, true }, - { 79254, true }, - { 79276, true }, + { 79223, true }, + { 79233, true }, + { 79255, true }, + { 79271, true }, { 79292, true }, - { 79313, true }, - { 79329, true }, + { 79308, true }, + { 79319, true }, + { 79330, true }, { 79340, true }, - { 79351, true }, - { 79361, true }, - { 79371, true }, - { 79388, true }, - { 79402, false }, - { 79415, true }, - { 79427, true }, - { 79438, true }, - { 79455, true }, - { 79465, true }, - { 79479, true }, - { 79494, true }, - { 79513, true }, - { 79531, true }, - { 79551, true }, - { 79562, true }, - { 79575, true }, - { 79588, true }, - { 79598, true }, - { 79613, true }, - { 79627, true }, - { 79639, true }, - { 79653, true }, - { 79668, true }, - { 79681, true }, - { 79698, true }, - { 79715, true }, - { 79729, true }, - { 79742, true }, - { 79756, true }, - { 79765, true }, - { 79784, false }, - { 79795, true }, - { 79806, true }, - { 79823, true }, - { 79832, true }, - { 79846, true }, - { 79854, true }, - { 79862, true }, - { 79869, true }, - { 79876, true }, - { 79885, true }, - { 79904, true }, - { 79919, true }, + { 79350, true }, + { 79367, true }, + { 79381, false }, + { 79394, true }, + { 79406, true }, + { 79417, true }, + { 79434, true }, + { 79444, true }, + { 79458, true }, + { 79473, true }, + { 79492, true }, + { 79510, true }, + { 79530, true }, + { 79541, true }, + { 79554, true }, + { 79567, true }, + { 79577, true }, + { 79592, true }, + { 79606, true }, + { 79618, true }, + { 79632, true }, + { 79647, true }, + { 79660, true }, + { 79677, true }, + { 79694, true }, + { 79708, true }, + { 79721, true }, + { 79735, true }, + { 79744, true }, + { 79763, false }, + { 79774, true }, + { 79785, true }, + { 79802, true }, + { 79811, true }, + { 79825, true }, + { 79833, true }, + { 79841, true }, + { 79848, true }, + { 79855, true }, + { 79864, true }, + { 79883, true }, + { 79898, true }, + { 79911, true }, { 79932, true }, - { 79953, true }, - { 79973, true }, - { 79990, true }, - { 80006, true }, - { 80026, true }, - { 80036, true }, + { 79952, true }, + { 79969, true }, + { 79985, true }, + { 80005, true }, + { 80015, true }, + { 80034, true }, { 80055, true }, - { 80076, true }, - { 80093, true }, - { 80106, true }, - { 80119, true }, - { 80133, true }, - { 80148, true }, - { 80160, true }, - { 80176, false }, - { 80190, false }, - { 80203, false }, - { 80210, true }, - { 80218, true }, - { 80230, true }, - { 80240, true }, - { 80255, true }, - { 80268, true }, - { 80283, true }, - { 80305, true }, - { 80324, true }, - { 80336, true }, - { 80348, true }, - { 80359, true }, - { 80374, true }, - { 80390, true }, - { 80408, true }, - { 80426, true }, - { 80434, true }, - { 80448, true }, - { 80458, true }, - { 80471, true }, - { 80478, true }, - { 80489, true }, - { 80501, false }, - { 80521, false }, - { 80537, true }, - { 80548, true }, - { 80563, true }, - { 80576, true }, - { 80589, true }, - { 80601, true }, - { 80614, true }, - { 80631, false }, - { 80642, false }, - { 80652, true }, - { 80667, true }, - { 80682, true }, - { 80698, true }, - { 80727, true }, - { 80746, true }, - { 80760, true }, - { 80777, true }, - { 80803, true }, - { 80818, true }, - { 80833, true }, - { 80848, true }, - { 80862, true }, - { 80881, true }, - { 80898, true }, + { 80072, true }, + { 80085, true }, + { 80098, true }, + { 80112, true }, + { 80127, true }, + { 80139, true }, + { 80155, false }, + { 80169, false }, + { 80182, false }, + { 80189, true }, + { 80197, true }, + { 80209, true }, + { 80219, true }, + { 80234, true }, + { 80247, true }, + { 80262, true }, + { 80284, true }, + { 80303, true }, + { 80315, true }, + { 80327, true }, + { 80338, true }, + { 80353, true }, + { 80369, true }, + { 80387, true }, + { 80405, true }, + { 80413, true }, + { 80427, true }, + { 80437, true }, + { 80450, true }, + { 80457, true }, + { 80468, true }, + { 80480, false }, + { 80500, false }, + { 80516, true }, + { 80527, true }, + { 80542, true }, + { 80555, true }, + { 80568, true }, + { 80580, true }, + { 80593, true }, + { 80610, false }, + { 80621, false }, + { 80631, true }, + { 80646, true }, + { 80661, true }, + { 80677, true }, + { 80706, true }, + { 80725, true }, + { 80739, true }, + { 80756, true }, + { 80782, true }, + { 80797, true }, + { 80812, true }, + { 80827, true }, + { 80841, true }, + { 80860, true }, + { 80877, true }, + { 80893, true }, { 80914, true }, - { 80935, true }, - { 80952, true }, - { 80986, true }, - { 81010, true }, - { 81039, true }, - { 81055, true }, - { 81080, true }, - { 81092, true }, - { 81106, true }, - { 81115, true }, - { 81135, false }, - { 81145, true }, - { 81160, true }, - { 81168, true }, - { 81177, true }, - { 81185, true }, - { 81193, true }, - { 81209, true }, - { 81231, true }, - { 81243, true }, + { 80931, true }, + { 80965, true }, + { 80989, true }, + { 81018, true }, + { 81034, true }, + { 81059, true }, + { 81071, true }, + { 81085, true }, + { 81094, true }, + { 81114, false }, + { 81124, true }, + { 81139, true }, + { 81147, true }, + { 81156, true }, + { 81164, true }, + { 81172, true }, + { 81188, true }, + { 81210, true }, + { 81222, true }, + { 81234, true }, + { 81245, true }, { 81255, true }, - { 81266, true }, - { 81276, true }, - { 81286, false }, - { 81298, true }, - { 81314, true }, - { 81330, true }, - { 81344, true }, - { 81360, true }, - { 81375, true }, - { 81389, true }, - { 81400, true }, - { 81415, true }, - { 81430, true }, - { 81441, false }, - { 81453, true }, + { 81265, false }, + { 81277, true }, + { 81293, true }, + { 81309, true }, + { 81323, true }, + { 81339, true }, + { 81354, true }, + { 81368, true }, + { 81379, true }, + { 81394, true }, + { 81409, true }, + { 81420, false }, + { 81432, true }, + { 81446, true }, + { 81457, true }, { 81467, true }, - { 81478, true }, - { 81488, true }, - { 81505, true }, - { 81523, true }, - { 81533, true }, - { 81556, true }, - { 81570, true }, - { 81586, true }, - { 81599, true }, - { 81618, true }, - { 81631, true }, - { 81648, true }, - { 81666, false }, + { 81484, true }, + { 81502, true }, + { 81512, true }, + { 81535, true }, + { 81549, true }, + { 81565, true }, + { 81578, true }, + { 81597, true }, + { 81610, true }, + { 81627, true }, + { 81645, false }, + { 81658, true }, { 81679, true }, - { 81700, true }, + { 81693, true }, + { 81703, true }, { 81714, true }, - { 81724, true }, - { 81735, true }, - { 81742, false }, - { 81751, true }, - { 81767, true }, - { 81783, true }, + { 81721, false }, + { 81730, true }, + { 81746, true }, + { 81762, true }, + { 81769, true }, { 81790, true }, - { 81811, true }, - { 81821, false }, - { 81836, true }, - { 81851, true }, - { 81868, true }, - { 81878, true }, + { 81800, false }, + { 81815, true }, + { 81830, true }, + { 81847, true }, + { 81857, true }, + { 81866, true }, + { 81875, true }, { 81887, true }, - { 81896, true }, - { 81908, true }, - { 81926, true }, - { 81936, true }, - { 81946, true }, - { 81959, true }, - { 81970, true }, - { 81985, true }, - { 81996, true }, - { 82012, true }, - { 82025, true }, - { 82035, true }, - { 82054, true }, - { 82070, true }, - { 82092, true }, - { 82104, true }, - { 82117, false }, - { 82131, true }, - { 82144, true }, - { 82159, true }, - { 82173, true }, - { 82188, true }, - { 82204, true }, - { 82215, false }, - { 82228, true }, - { 82240, true }, - { 82257, true }, - { 82270, true }, - { 82289, true }, - { 82305, true }, - { 82317, false }, - { 82327, true }, - { 82343, true }, - { 82363, false }, - { 82371, true }, - { 82383, true }, - { 82394, true }, - { 82413, false }, - { 82433, true }, - { 82442, true }, - { 82453, true }, - { 82484, true }, - { 82493, true }, - { 82507, true }, - { 82521, true }, - { 82541, true }, - { 82560, true }, - { 82574, true }, - { 82590, true }, - { 82605, true }, - { 82619, true }, - { 82633, true }, - { 82641, true }, - { 82654, true }, - { 82666, true }, - { 82678, true }, - { 82694, true }, - { 82705, true }, - { 82720, true }, - { 82745, true }, - { 82761, true }, - { 82777, true }, - { 82799, true }, - { 82815, true }, - { 82834, true }, - { 82858, true }, - { 82874, true }, + { 81905, true }, + { 81915, true }, + { 81925, true }, + { 81938, true }, + { 81949, true }, + { 81964, true }, + { 81975, true }, + { 81991, true }, + { 82004, true }, + { 82014, true }, + { 82033, true }, + { 82049, true }, + { 82071, true }, + { 82083, true }, + { 82096, false }, + { 82110, true }, + { 82123, true }, + { 82138, true }, + { 82152, true }, + { 82167, true }, + { 82183, true }, + { 82194, false }, + { 82207, true }, + { 82219, true }, + { 82236, true }, + { 82249, true }, + { 82268, true }, + { 82284, true }, + { 82296, false }, + { 82306, true }, + { 82322, true }, + { 82333, true }, + { 82353, false }, + { 82361, true }, + { 82373, true }, + { 82384, true }, + { 82403, false }, + { 82423, true }, + { 82432, true }, + { 82443, true }, + { 82474, true }, + { 82483, true }, + { 82497, true }, + { 82511, true }, + { 82531, true }, + { 82550, true }, + { 82564, true }, + { 82580, true }, + { 82595, true }, + { 82609, true }, + { 82623, true }, + { 82631, true }, + { 82644, true }, + { 82656, true }, + { 82668, true }, + { 82684, true }, + { 82695, true }, + { 82710, true }, + { 82735, true }, + { 82751, true }, + { 82767, true }, + { 82789, true }, + { 82805, true }, + { 82824, true }, + { 82848, true }, + { 82864, true }, + { 82880, true }, { 82890, true }, - { 82900, true }, - { 82912, true }, - { 82930, true }, - { 82942, true }, - { 82957, true }, - { 82977, true }, - { 82997, true }, - { 83017, true }, - { 83038, false }, - { 83054, true }, - { 83072, true }, - { 83087, true }, - { 83099, false }, - { 83107, true }, - { 83121, true }, - { 83135, true }, - { 83147, true }, - { 83161, true }, - { 83174, true }, - { 83192, true }, - { 83206, true }, - { 83222, true }, - { 83242, true }, - { 83273, true }, - { 83304, true }, - { 83326, true }, - { 83344, true }, - { 83358, true }, - { 83380, true }, - { 83395, true }, + { 82902, true }, + { 82920, true }, + { 82932, true }, + { 82947, true }, + { 82967, true }, + { 82987, true }, + { 83007, true }, + { 83028, false }, + { 83044, true }, + { 83062, true }, + { 83077, true }, + { 83089, false }, + { 83097, true }, + { 83111, true }, + { 83125, true }, + { 83137, true }, + { 83151, true }, + { 83164, true }, + { 83182, true }, + { 83196, true }, + { 83212, true }, + { 83232, true }, + { 83263, true }, + { 83294, true }, + { 83316, true }, + { 83334, true }, + { 83348, true }, + { 83370, true }, + { 83385, true }, + { 83404, true }, { 83414, true }, - { 83424, true }, - { 83439, true }, - { 83454, true }, - { 83469, true }, - { 83486, true }, - { 83499, true }, - { 83512, true }, + { 83429, true }, + { 83444, true }, + { 83459, true }, + { 83476, true }, + { 83489, true }, + { 83502, true }, + { 83515, true }, { 83525, true }, - { 83535, true }, - { 83558, true }, - { 83569, true }, - { 83581, true }, - { 83598, true }, - { 83615, true }, - { 83630, true }, - { 83637, true }, - { 83650, true }, + { 83548, true }, + { 83559, true }, + { 83571, true }, + { 83588, true }, + { 83605, true }, + { 83620, true }, + { 83627, true }, + { 83640, true }, + { 83657, true }, { 83667, true }, { 83677, true }, - { 83687, true }, - { 83696, true }, - { 83715, true }, - { 83733, true }, - { 83754, true }, - { 83774, true }, - { 83787, true }, - { 83804, true }, - { 83817, true }, - { 83839, true }, + { 83686, true }, + { 83705, true }, + { 83723, true }, + { 83744, true }, + { 83764, true }, + { 83777, true }, + { 83794, true }, + { 83807, true }, + { 83829, true }, + { 83841, true }, { 83851, true }, - { 83861, true }, - { 83874, true }, - { 83896, true }, - { 83910, true }, - { 83932, true }, - { 83949, true }, - { 83963, true }, - { 83971, true }, - { 83983, true }, + { 83864, true }, + { 83886, true }, + { 83900, true }, + { 83922, true }, + { 83939, true }, + { 83953, true }, + { 83961, true }, + { 83973, true }, + { 83988, true }, { 83998, true }, - { 84008, true }, - { 84019, true }, - { 84031, true }, - { 84042, true }, + { 84009, true }, + { 84021, true }, + { 84032, true }, + { 84041, true }, { 84051, true }, - { 84061, true }, - { 84078, true }, - { 84097, true }, - { 84119, true }, - { 84131, true }, - { 84149, true }, - { 84162, true }, - { 84173, true }, - { 84188, true }, - { 84201, true }, - { 84224, true }, + { 84068, true }, + { 84087, true }, + { 84109, true }, + { 84121, true }, + { 84139, true }, + { 84152, true }, + { 84163, true }, + { 84178, true }, + { 84191, true }, + { 84214, true }, + { 84228, true }, { 84238, true }, - { 84248, true }, - { 84262, true }, - { 84278, true }, - { 84293, true }, + { 84252, true }, + { 84268, true }, + { 84283, true }, + { 84295, true }, { 84305, true }, - { 84315, true }, - { 84331, true }, - { 84349, true }, - { 84363, true }, - { 84371, true }, - { 84382, true }, - { 84396, true }, + { 84321, true }, + { 84339, true }, + { 84353, true }, + { 84361, true }, + { 84372, true }, + { 84386, true }, + { 84399, true }, { 84409, true }, - { 84419, true }, - { 84430, true }, - { 84441, false }, - { 84457, true }, - { 84470, true }, - { 84485, true }, - { 84496, true }, - { 84512, true }, - { 84530, true }, - { 84547, true }, - { 84568, true }, - { 84580, true }, - { 84589, true }, - { 84602, false }, - { 84620, true }, - { 84629, true }, - { 84640, true }, - { 84652, true }, - { 84662, false }, - { 84680, true }, - { 84699, true }, - { 84718, true }, - { 84732, true }, - { 84752, false }, - { 84772, false }, - { 84784, true }, - { 84797, true }, - { 84816, true }, - { 84828, true }, - { 84841, true }, - { 84856, true }, - { 84870, true }, - { 84880, true }, - { 84890, true }, - { 84900, true }, - { 84912, true }, - { 84927, true }, - { 84942, true }, - { 84951, true }, + { 84420, true }, + { 84431, false }, + { 84447, true }, + { 84460, true }, + { 84475, true }, + { 84486, true }, + { 84502, true }, + { 84520, true }, + { 84537, true }, + { 84558, true }, + { 84570, true }, + { 84579, true }, + { 84592, false }, + { 84610, true }, + { 84619, true }, + { 84630, true }, + { 84642, true }, + { 84652, false }, + { 84670, true }, + { 84688, true }, + { 84707, true }, + { 84726, true }, + { 84740, true }, + { 84760, false }, + { 84780, false }, + { 84792, true }, + { 84805, true }, + { 84824, true }, + { 84836, true }, + { 84849, true }, + { 84864, true }, + { 84878, true }, + { 84888, true }, + { 84898, true }, + { 84908, true }, + { 84920, true }, + { 84935, true }, + { 84950, true }, { 84959, true }, - { 84972, true }, - { 84999, true }, - { 85007, true }, - { 85028, true }, - { 85042, true }, - { 85052, true }, - { 85060, true }, - { 85069, true }, - { 85078, true }, - { 85095, true }, - { 85107, true }, - { 85115, true }, - { 85136, true }, - { 85155, true }, - { 85167, true }, - { 85185, true }, - { 85197, true }, - { 85208, true }, - { 85215, true }, + { 84967, true }, + { 84980, true }, + { 84988, true }, + { 85015, true }, + { 85023, true }, + { 85044, true }, + { 85058, true }, + { 85068, true }, + { 85076, true }, + { 85085, true }, + { 85094, true }, + { 85111, true }, + { 85123, true }, + { 85131, true }, + { 85152, true }, + { 85171, true }, + { 85183, true }, + { 85201, true }, + { 85213, true }, { 85224, true }, - { 85233, true }, - { 85249, true }, - { 85256, true }, - { 85264, true }, - { 85278, false }, - { 85289, true }, - { 85300, true }, - { 85315, true }, - { 85325, true }, - { 85338, true }, - { 85350, true }, - { 85361, true }, - { 85371, false }, - { 85381, true }, - { 85395, true }, - { 85415, true }, - { 85430, true }, + { 85231, true }, + { 85243, true }, + { 85252, true }, + { 85261, true }, + { 85277, true }, + { 85284, true }, + { 85292, true }, + { 85306, false }, + { 85317, true }, + { 85328, true }, + { 85343, true }, + { 85353, true }, + { 85366, true }, + { 85378, true }, + { 85389, true }, + { 85399, false }, + { 85409, true }, + { 85423, true }, { 85443, true }, - { 85455, true }, - { 85470, true }, + { 85458, true }, + { 85471, true }, { 85483, true }, - { 85510, true }, - { 85524, true }, - { 85538, true }, - { 85555, true }, - { 85575, true }, - { 85590, true }, - { 85600, true }, + { 85496, true }, + { 85523, true }, + { 85537, true }, + { 85551, true }, + { 85568, true }, + { 85588, true }, + { 85603, true }, { 85613, true }, - { 85630, true }, + { 85626, true }, { 85643, true }, - { 85653, true }, - { 85680, true }, - { 85690, true }, - { 85699, true }, - { 85706, true }, - { 85722, true }, - { 85733, true }, - { 85744, true }, - { 85758, true }, - { 85769, true }, - { 85779, true }, - { 85800, true }, - { 85808, true }, - { 85818, true }, - { 85829, true }, - { 85841, true }, - { 85864, true }, - { 85878, true }, - { 85897, true }, - { 85914, true }, - { 85922, true }, - { 85950, true }, - { 85968, true }, - { 85978, true }, - { 85987, true }, - { 86003, true }, - { 86021, true }, - { 86053, true }, - { 86069, true }, - { 86090, true }, - { 86107, true }, - { 86121, true }, - { 86141, true }, - { 86153, true }, - { 86174, true }, - { 86188, true }, - { 86207, true }, - { 86225, true }, - { 86236, true }, - { 86244, true }, - { 86256, true }, - { 86270, true }, - { 86282, true }, + { 85656, true }, + { 85666, true }, + { 85693, true }, + { 85703, true }, + { 85712, true }, + { 85719, true }, + { 85735, true }, + { 85746, true }, + { 85757, true }, + { 85771, true }, + { 85782, true }, + { 85792, true }, + { 85813, true }, + { 85821, true }, + { 85831, true }, + { 85842, true }, + { 85854, true }, + { 85877, true }, + { 85891, true }, + { 85910, true }, + { 85927, true }, + { 85935, true }, + { 85963, true }, + { 85981, true }, + { 85991, true }, + { 86000, true }, + { 86016, true }, + { 86034, true }, + { 86066, true }, + { 86082, true }, + { 86103, true }, + { 86120, true }, + { 86134, true }, + { 86154, true }, + { 86166, true }, + { 86187, true }, + { 86201, true }, + { 86220, true }, + { 86238, true }, + { 86249, true }, + { 86257, true }, + { 86269, true }, + { 86283, true }, { 86295, true }, - { 86304, true }, - { 86314, true }, - { 86325, true }, - { 86337, true }, - { 86347, true }, - { 86370, false }, - { 86385, true }, - { 86400, true }, - { 86419, true }, - { 86437, true }, - { 86451, true }, - { 86465, true }, - { 86475, true }, + { 86308, true }, + { 86317, true }, + { 86327, true }, + { 86338, true }, + { 86350, true }, + { 86360, true }, + { 86383, false }, + { 86398, true }, + { 86413, true }, + { 86432, true }, + { 86450, true }, + { 86464, true }, + { 86478, true }, { 86488, true }, { 86501, true }, - { 86513, true }, - { 86527, true }, - { 86543, true }, - { 86552, true }, - { 86568, true }, - { 86595, true }, - { 86610, true }, + { 86514, true }, + { 86526, true }, + { 86540, true }, + { 86556, true }, + { 86571, true }, + { 86580, true }, + { 86596, true }, { 86623, true }, - { 86639, true }, - { 86656, true }, - { 86678, true }, - { 86700, true }, - { 86722, true }, - { 86734, true }, - { 86748, true }, - { 86763, true }, - { 86776, true }, - { 86785, true }, - { 86801, true }, - { 86818, true }, - { 86832, true }, - { 86845, true }, - { 86859, true }, - { 86871, true }, - { 86884, true }, - { 86897, true }, - { 86907, true }, - { 86921, false }, - { 86933, true }, - { 86946, true }, - { 86968, true }, - { 86990, true }, - { 87001, false }, - { 87016, true }, - { 87027, false }, - { 87047, true }, - { 87064, true }, - { 87083, true }, - { 87110, true }, - { 87129, true }, - { 87141, true }, - { 87162, true }, - { 87187, true }, - { 87206, true }, - { 87221, true }, - { 87241, false }, - { 87249, true }, - { 87261, true }, - { 87273, true }, - { 87287, true }, - { 87297, true }, - { 87310, true }, - { 87328, true }, + { 86638, true }, + { 86651, true }, + { 86667, true }, + { 86684, false }, + { 86701, true }, + { 86723, true }, + { 86745, true }, + { 86767, true }, + { 86779, true }, + { 86793, true }, + { 86808, true }, + { 86821, true }, + { 86830, true }, + { 86846, true }, + { 86863, true }, + { 86877, true }, + { 86890, true }, + { 86904, true }, + { 86916, true }, + { 86929, true }, + { 86942, true }, + { 86952, true }, + { 86966, false }, + { 86978, true }, + { 86991, true }, + { 87013, true }, + { 87035, true }, + { 87046, false }, + { 87061, true }, + { 87072, false }, + { 87092, true }, + { 87109, true }, + { 87128, true }, + { 87155, true }, + { 87174, true }, + { 87186, true }, + { 87207, true }, + { 87232, true }, + { 87251, true }, + { 87266, true }, + { 87286, false }, + { 87294, true }, + { 87306, true }, + { 87318, true }, + { 87332, true }, { 87342, true }, - { 87349, true }, - { 87356, true }, - { 87368, true }, - { 87379, true }, - { 87392, true }, - { 87406, true }, - { 87423, true }, + { 87355, true }, + { 87373, true }, + { 87387, true }, + { 87394, true }, + { 87401, true }, + { 87413, true }, + { 87424, true }, { 87437, true }, - { 87453, true }, - { 87464, true }, - { 87471, true }, - { 87484, true }, - { 87497, true }, - { 87506, true }, - { 87520, true }, - { 87536, false }, + { 87451, true }, + { 87468, true }, + { 87482, true }, + { 87498, true }, + { 87509, true }, + { 87516, true }, + { 87529, true }, + { 87542, true }, { 87551, true }, - { 87579, true }, - { 87594, true }, - { 87615, true }, - { 87629, true }, - { 87643, true }, - { 87664, true }, - { 87680, true }, - { 87692, true }, - { 87702, true }, - { 87713, true }, - { 87723, true }, - { 87736, true }, - { 87746, true }, - { 87759, true }, - { 87776, true }, - { 87795, true }, - { 87814, true }, - { 87832, true }, - { 87843, true }, - { 87855, true }, - { 87867, true }, - { 87878, true }, - { 87890, true }, - { 87905, true }, - { 87931, true }, - { 87942, true }, - { 87953, true }, - { 87964, true }, + { 87565, true }, + { 87581, false }, + { 87596, true }, + { 87624, true }, + { 87639, true }, + { 87660, true }, + { 87674, true }, + { 87688, true }, + { 87709, true }, + { 87725, true }, + { 87737, true }, + { 87747, true }, + { 87758, true }, + { 87768, true }, + { 87781, true }, + { 87791, true }, + { 87804, true }, + { 87821, true }, + { 87840, true }, + { 87859, true }, + { 87877, true }, + { 87888, true }, + { 87900, true }, + { 87912, true }, + { 87923, true }, + { 87935, true }, + { 87950, true }, { 87976, true }, { 87987, true }, - { 88000, true }, + { 87998, true }, { 88009, true }, - { 88018, true }, - { 88031, true }, - { 88038, false }, - { 88046, true }, + { 88021, true }, + { 88032, true }, + { 88045, true }, { 88054, true }, - { 88069, true }, - { 88082, true }, - { 88093, true }, - { 88107, false }, - { 88119, true }, - { 88143, true }, - { 88158, true }, - { 88171, true }, - { 88185, true }, + { 88063, true }, + { 88076, true }, + { 88083, false }, + { 88091, true }, + { 88099, true }, + { 88114, true }, + { 88127, true }, + { 88138, true }, + { 88152, false }, + { 88164, true }, + { 88188, true }, { 88203, true }, - { 88211, true }, - { 88228, true }, - { 88253, true }, + { 88216, true }, + { 88230, true }, + { 88248, true }, + { 88256, true }, { 88273, true }, - { 88297, true }, - { 88309, true }, - { 88322, true }, - { 88338, true }, - { 88347, true }, - { 88363, true }, - { 88381, true }, - { 88396, true }, - { 88416, true }, - { 88429, true }, - { 88445, true }, - { 88459, true }, - { 88475, true }, - { 88495, true }, - { 88513, true }, - { 88532, true }, - { 88549, true }, - { 88565, true }, - { 88575, true }, - { 88604, true }, - { 88624, true }, - { 88641, true }, - { 88657, true }, - { 88666, true }, - { 88679, true }, - { 88691, true }, - { 88700, false }, - { 88714, true }, - { 88731, true }, - { 88764, true }, - { 88784, true }, - { 88796, true }, + { 88298, true }, + { 88318, true }, + { 88342, true }, + { 88354, true }, + { 88367, true }, + { 88383, true }, + { 88392, true }, + { 88408, true }, + { 88426, true }, + { 88441, true }, + { 88461, true }, + { 88474, true }, + { 88490, true }, + { 88504, true }, + { 88520, true }, + { 88540, true }, + { 88558, true }, + { 88577, true }, + { 88594, true }, + { 88610, true }, + { 88620, true }, + { 88649, true }, + { 88669, true }, + { 88686, true }, + { 88702, true }, + { 88711, true }, + { 88724, true }, + { 88736, true }, + { 88745, false }, + { 88759, true }, + { 88776, true }, { 88809, true }, - { 88822, true }, - { 88837, true }, - { 88848, true }, - { 88865, true }, - { 88877, true }, - { 88889, true }, - { 88901, true }, + { 88829, true }, + { 88841, true }, + { 88854, true }, + { 88867, true }, + { 88882, true }, + { 88893, true }, { 88910, true }, - { 88927, true }, - { 88941, true }, - { 88956, true }, - { 88970, true }, - { 88988, true }, - { 89009, true }, - { 89023, true }, - { 89037, true }, - { 89048, true }, - { 89059, true }, - { 89075, true }, - { 89087, true }, - { 89098, true }, - { 89112, true }, - { 89121, true }, - { 89130, true }, - { 89145, true }, - { 89154, true }, - { 89162, true }, - { 89173, true }, - { 89184, true }, - { 89198, true }, - { 89213, true }, - { 89227, true }, - { 89237, true }, - { 89247, true }, - { 89255, true }, - { 89264, true }, - { 89276, true }, - { 89285, true }, - { 89308, true }, - { 89323, true }, - { 89331, true }, - { 89344, true }, - { 89356, true }, + { 88922, true }, + { 88934, true }, + { 88946, true }, + { 88955, true }, + { 88972, true }, + { 88986, true }, + { 89001, true }, + { 89015, true }, + { 89033, true }, + { 89054, true }, + { 89068, true }, + { 89082, true }, + { 89093, true }, + { 89104, true }, + { 89120, true }, + { 89132, true }, + { 89143, true }, + { 89157, true }, + { 89166, true }, + { 89175, true }, + { 89190, true }, + { 89199, true }, + { 89207, true }, + { 89218, true }, + { 89229, true }, + { 89243, true }, + { 89258, true }, + { 89272, true }, + { 89282, true }, + { 89292, true }, + { 89300, true }, + { 89309, true }, + { 89321, true }, + { 89330, true }, + { 89353, true }, { 89368, true }, - { 89381, true }, - { 89391, false }, - { 89400, false }, - { 89409, false }, - { 89418, true }, - { 89435, true }, - { 89454, true }, - { 89477, true }, - { 89496, true }, - { 89511, true }, - { 89525, true }, - { 89540, true }, - { 89559, true }, - { 89572, true }, - { 89588, true }, - { 89605, true }, - { 89621, true }, - { 89636, true }, - { 89646, true }, - { 89662, true }, + { 89376, true }, + { 89389, true }, + { 89401, true }, + { 89413, true }, + { 89426, true }, + { 89436, false }, + { 89445, false }, + { 89454, false }, + { 89463, true }, + { 89480, true }, + { 89499, true }, + { 89522, true }, + { 89541, true }, + { 89556, true }, + { 89570, true }, + { 89585, true }, + { 89604, true }, + { 89617, true }, + { 89633, true }, + { 89650, true }, + { 89666, true }, { 89681, true }, - { 89696, true }, - { 89715, true }, - { 89723, true }, - { 89737, true }, - { 89751, true }, - { 89765, true }, - { 89782, false }, - { 89802, true }, - { 89815, true }, - { 89827, true }, - { 89842, true }, + { 89691, true }, + { 89707, true }, + { 89726, true }, + { 89741, true }, + { 89760, true }, + { 89768, true }, + { 89782, true }, + { 89796, true }, + { 89810, true }, + { 89827, false }, + { 89847, true }, { 89860, true }, - { 89871, true }, - { 89881, true }, - { 89895, true }, - { 89908, true }, - { 89924, true }, - { 89939, true }, - { 89964, true }, - { 89990, true }, - { 90005, true }, - { 90030, true }, - { 90037, true }, - { 90059, true }, - { 90074, true }, + { 89872, true }, + { 89887, true }, + { 89905, true }, + { 89916, true }, + { 89926, true }, + { 89940, true }, + { 89953, true }, + { 89969, true }, + { 89984, true }, + { 90009, true }, + { 90035, true }, + { 90050, true }, + { 90075, true }, { 90082, true }, - { 90090, true }, - { 90101, true }, - { 90117, true }, - { 90134, true }, - { 90148, true }, + { 90104, true }, + { 90119, true }, + { 90127, true }, + { 90135, true }, + { 90146, true }, { 90162, true }, - { 90178, true }, - { 90205, true }, - { 90219, true }, - { 90228, true }, - { 90241, true }, - { 90253, true }, - { 90276, true }, - { 90296, true }, - { 90315, true }, - { 90337, false }, - { 90348, true }, - { 90365, true }, - { 90379, true }, - { 90399, true }, + { 90179, true }, + { 90193, true }, + { 90207, true }, + { 90223, true }, + { 90250, true }, + { 90264, true }, + { 90273, true }, + { 90286, true }, + { 90298, true }, + { 90321, true }, + { 90341, true }, + { 90360, true }, + { 90382, false }, + { 90393, true }, + { 90410, true }, { 90424, true }, - { 90440, true }, - { 90452, true }, - { 90464, true }, - { 90486, true }, - { 90501, true }, - { 90516, true }, - { 90533, true }, - { 90548, true }, - { 90565, true }, - { 90580, true }, - { 90595, true }, - { 90607, false }, - { 90617, true }, - { 90634, true }, - { 90645, false }, - { 90660, true }, - { 90677, true }, - { 90691, true }, - { 90704, true }, - { 90717, true }, - { 90729, true }, - { 90741, true }, - { 90751, true }, - { 90763, true }, - { 90778, true }, - { 90790, true }, - { 90801, true }, - { 90821, true }, - { 90833, true }, - { 90844, true }, - { 90869, true }, + { 90444, true }, + { 90469, true }, + { 90485, true }, + { 90497, true }, + { 90509, true }, + { 90531, true }, + { 90546, true }, + { 90561, true }, + { 90578, true }, + { 90593, true }, + { 90610, true }, + { 90625, true }, + { 90640, true }, + { 90652, false }, + { 90662, true }, + { 90679, true }, + { 90690, false }, + { 90705, true }, + { 90722, true }, + { 90736, true }, + { 90749, true }, + { 90762, true }, + { 90774, true }, + { 90786, true }, + { 90796, true }, + { 90808, true }, + { 90823, true }, + { 90835, true }, + { 90846, true }, + { 90866, true }, { 90878, true }, - { 90886, true }, - { 90899, true }, - { 90922, true }, - { 90939, true }, - { 90950, true }, - { 90966, false }, - { 90978, true }, - { 90986, true }, - { 90996, true }, - { 91011, true }, - { 91025, true }, - { 91035, false }, - { 91053, true }, - { 91077, true }, - { 91089, true }, - { 91117, true }, - { 91133, true }, - { 91145, true }, - { 91159, true }, - { 91187, true }, - { 91201, true }, - { 91217, true }, - { 91234, true }, - { 91248, true }, - { 91265, true }, - { 91287, true }, - { 91297, true }, - { 91307, true }, + { 90889, true }, + { 90914, true }, + { 90923, true }, + { 90931, true }, + { 90944, true }, + { 90967, true }, + { 90984, true }, + { 90995, true }, + { 91011, false }, + { 91023, true }, + { 91031, true }, + { 91041, true }, + { 91056, true }, + { 91070, true }, + { 91080, false }, + { 91098, true }, + { 91122, true }, + { 91134, true }, + { 91162, true }, + { 91178, true }, + { 91190, true }, + { 91204, true }, + { 91232, true }, + { 91246, true }, + { 91262, true }, + { 91279, true }, + { 91293, true }, + { 91315, true }, { 91325, true }, - { 91344, true }, - { 91363, true }, - { 91388, true }, - { 91407, true }, - { 91424, true }, - { 91438, true }, - { 91451, true }, - { 91480, true }, - { 91510, true }, - { 91522, true }, - { 91531, true }, - { 91544, true }, - { 91555, true }, - { 91577, true }, - { 91588, true }, - { 91598, true }, - { 91614, true }, - { 91631, true }, - { 91654, true }, - { 91677, true }, - { 91703, true }, - { 91717, true }, + { 91335, true }, + { 91353, true }, + { 91372, true }, + { 91391, true }, + { 91416, true }, + { 91435, true }, + { 91452, true }, + { 91466, true }, + { 91479, true }, + { 91508, true }, + { 91538, true }, + { 91550, true }, + { 91559, true }, + { 91572, true }, + { 91583, true }, + { 91605, true }, + { 91616, true }, + { 91626, true }, + { 91642, true }, + { 91659, true }, + { 91682, true }, + { 91705, true }, { 91731, true }, - { 91750, false }, - { 91760, true }, - { 91772, true }, + { 91745, true }, + { 91759, true }, + { 91778, false }, { 91788, true }, - { 91796, true }, - { 91815, true }, - { 91827, false }, - { 91838, true }, - { 91846, true }, - { 91862, true }, - { 91876, true }, - { 91888, true }, - { 91901, true }, - { 91920, true }, + { 91800, true }, + { 91816, true }, + { 91824, true }, + { 91843, true }, + { 91855, false }, + { 91866, true }, + { 91874, true }, + { 91890, true }, + { 91904, true }, + { 91916, true }, { 91929, true }, - { 91940, true }, - { 91952, true }, - { 91965, true }, - { 91975, true }, - { 91988, true }, - { 92000, true }, + { 91948, true }, + { 91957, true }, + { 91968, true }, + { 91980, true }, + { 91993, true }, + { 92003, true }, { 92016, true }, - { 92024, false }, - { 92032, true }, - { 92054, true }, - { 92066, true }, - { 92074, true }, - { 92095, true }, - { 92119, true }, - { 92135, true }, - { 92151, true }, - { 92161, true }, - { 92175, true }, - { 92192, true }, - { 92202, true }, - { 92217, true }, - { 92227, true }, - { 92237, true }, - { 92247, true }, - { 92259, true }, - { 92282, true }, - { 92296, true }, - { 92311, true }, + { 92028, true }, + { 92044, true }, + { 92052, false }, + { 92060, true }, + { 92082, true }, + { 92094, true }, + { 92102, true }, + { 92123, true }, + { 92147, true }, + { 92163, true }, + { 92179, true }, + { 92189, true }, + { 92203, true }, + { 92220, true }, + { 92230, true }, + { 92245, true }, + { 92255, true }, + { 92265, true }, + { 92275, true }, + { 92287, true }, + { 92310, true }, { 92324, true }, - { 92336, true }, - { 92345, true }, - { 92356, true }, - { 92369, true }, + { 92339, true }, + { 92352, true }, + { 92364, true }, + { 92373, true }, { 92384, true }, - { 92399, true }, - { 92409, true }, - { 92429, true }, - { 92443, true }, - { 92466, true }, - { 92478, true }, - { 92489, true }, - { 92511, true }, - { 92522, true }, - { 92532, true }, - { 92546, true }, - { 92554, true }, - { 92563, true }, - { 92571, true }, - { 92586, true }, - { 92596, true }, - { 92606, true }, - { 92621, true }, - { 92630, true }, - { 92638, true }, - { 92647, true }, + { 92397, true }, + { 92412, true }, + { 92427, true }, + { 92437, true }, + { 92457, true }, + { 92471, true }, + { 92494, true }, + { 92506, true }, + { 92517, true }, + { 92539, true }, + { 92550, true }, + { 92560, true }, + { 92574, true }, + { 92582, true }, + { 92591, true }, + { 92599, true }, + { 92614, true }, + { 92624, true }, + { 92634, true }, + { 92649, true }, { 92658, true }, - { 92670, true }, - { 92682, true }, - { 92692, true }, - { 92702, true }, - { 92714, true }, + { 92666, true }, + { 92674, true }, + { 92683, true }, + { 92694, true }, + { 92706, true }, + { 92718, true }, { 92728, true }, - { 92743, true }, - { 92760, true }, - { 92772, true }, - { 92783, true }, - { 92790, true }, - { 92804, true }, - { 92815, true }, + { 92738, true }, + { 92750, true }, + { 92764, true }, + { 92779, true }, + { 92796, true }, + { 92808, true }, + { 92819, true }, { 92826, true }, - { 92834, true }, - { 92845, true }, - { 92860, true }, - { 92874, true }, - { 92888, true }, - { 92903, true }, - { 92918, true }, - { 92929, true }, - { 92940, true }, - { 92955, true }, - { 92968, true }, - { 92981, true }, - { 92988, true }, - { 93008, true }, + { 92840, true }, + { 92851, true }, + { 92862, true }, + { 92870, true }, + { 92881, true }, + { 92896, true }, + { 92910, true }, + { 92924, true }, + { 92939, true }, + { 92954, true }, + { 92965, true }, + { 92976, true }, + { 92991, true }, + { 93004, true }, { 93017, true }, - { 93029, true }, - { 93042, true }, - { 93059, true }, - { 93074, true }, - { 93089, true }, - { 93109, true }, - { 93129, true }, - { 93138, true }, - { 93154, true }, - { 93166, true }, - { 93175, true }, - { 93185, true }, - { 93194, true }, - { 93204, false }, + { 93024, true }, + { 93044, true }, + { 93053, true }, + { 93065, true }, + { 93078, true }, + { 93095, true }, + { 93110, true }, + { 93125, true }, + { 93145, true }, + { 93165, true }, + { 93174, true }, + { 93190, true }, + { 93202, true }, { 93211, true }, - { 93222, true }, - { 93235, true }, - { 93250, true }, - { 93267, true }, - { 93283, true }, - { 93304, true }, - { 93311, true }, - { 93331, true }, - { 93341, true }, - { 93352, false }, - { 93365, true }, - { 93379, true }, - { 93389, true }, + { 93221, true }, + { 93230, true }, + { 93240, false }, + { 93247, true }, + { 93258, true }, + { 93271, true }, + { 93286, true }, + { 93303, true }, + { 93319, true }, + { 93340, true }, + { 93347, true }, + { 93367, true }, + { 93377, true }, + { 93388, false }, { 93401, true }, - { 93421, false }, + { 93415, true }, + { 93425, true }, { 93437, true }, - { 93446, false }, - { 93455, true }, - { 93463, true }, - { 93475, true }, - { 93482, true }, - { 93500, true }, - { 93512, true }, - { 93531, true }, - { 93544, true }, - { 93557, false }, - { 93566, true }, - { 93575, true }, - { 93586, true }, - { 93606, true }, - { 93623, true }, - { 93636, true }, - { 93652, false }, - { 93667, true }, - { 93681, true }, - { 93694, true }, - { 93713, true }, - { 93726, true }, - { 93743, true }, - { 93754, true }, - { 93771, false }, - { 93792, false }, - { 93808, false }, - { 93828, true }, - { 93840, true }, - { 93863, true }, - { 93875, true }, - { 93888, false }, + { 93457, false }, + { 93473, true }, + { 93482, false }, + { 93491, true }, + { 93499, true }, + { 93511, true }, + { 93518, true }, + { 93536, true }, + { 93548, true }, + { 93567, true }, + { 93580, true }, + { 93593, false }, + { 93602, true }, + { 93611, true }, + { 93622, true }, + { 93642, true }, + { 93659, true }, + { 93672, true }, + { 93688, false }, + { 93703, true }, + { 93717, true }, + { 93730, true }, + { 93749, true }, + { 93762, true }, + { 93779, true }, + { 93790, true }, + { 93807, false }, + { 93828, false }, + { 93844, false }, + { 93864, true }, + { 93876, true }, { 93899, true }, - { 93908, true }, - { 93919, true }, - { 93934, true }, - { 93952, true }, - { 93979, true }, - { 93989, true }, - { 93997, true }, - { 94011, true }, - { 94023, true }, - { 94038, true }, - { 94048, true }, + { 93911, true }, + { 93924, false }, + { 93935, true }, + { 93944, true }, + { 93955, true }, + { 93970, true }, + { 93988, true }, + { 94015, true }, + { 94025, true }, + { 94033, true }, + { 94047, true }, { 94059, true }, - { 94068, true }, - { 94087, true }, - { 94100, true }, - { 94110, true }, - { 94118, true }, - { 94125, true }, - { 94138, true }, - { 94148, true }, - { 94157, false }, - { 94167, true }, - { 94176, true }, - { 94188, true }, - { 94199, true }, - { 94210, true }, - { 94220, false }, - { 94237, true }, + { 94074, true }, + { 94084, true }, + { 94095, true }, + { 94104, true }, + { 94123, true }, + { 94136, true }, + { 94146, true }, + { 94154, true }, + { 94161, true }, + { 94174, true }, + { 94184, true }, + { 94193, false }, + { 94203, true }, + { 94212, true }, + { 94224, true }, + { 94235, true }, { 94246, true }, - { 94256, true }, - { 94264, true }, - { 94274, true }, - { 94284, true }, - { 94297, true }, - { 94309, true }, - { 94324, true }, - { 94336, true }, - { 94352, true }, - { 94366, true }, - { 94380, true }, - { 94387, true }, - { 94399, true }, - { 94408, true }, - { 94424, true }, - { 94438, true }, - { 94449, true }, - { 94458, true }, - { 94472, true }, - { 94484, true }, - { 94496, true }, - { 94506, true }, - { 94516, true }, - { 94528, true }, - { 94538, true }, - { 94548, true }, - { 94566, true }, - { 94581, true }, - { 94592, true }, - { 94605, true }, - { 94612, false }, - { 94623, true }, - { 94633, true }, - { 94643, true }, - { 94654, true }, - { 94663, true }, - { 94685, true }, - { 94710, true }, - { 94729, true }, - { 94736, true }, - { 94750, true }, - { 94765, true }, - { 94775, true }, - { 94799, true }, - { 94815, true }, - { 94837, true }, - { 94851, true }, - { 94864, true }, - { 94878, true }, - { 94901, true }, - { 94912, true }, - { 94921, true }, - { 94932, true }, - { 94946, true }, - { 94957, true }, - { 94969, true }, - { 94988, true }, - { 95001, true }, + { 94256, false }, + { 94273, true }, + { 94282, true }, + { 94292, true }, + { 94300, true }, + { 94310, true }, + { 94320, true }, + { 94333, true }, + { 94345, true }, + { 94360, true }, + { 94372, true }, + { 94388, true }, + { 94402, true }, + { 94416, true }, + { 94423, true }, + { 94435, true }, + { 94444, true }, + { 94460, true }, + { 94474, true }, + { 94485, true }, + { 94494, true }, + { 94508, true }, + { 94520, true }, + { 94532, true }, + { 94542, true }, + { 94552, true }, + { 94564, true }, + { 94574, true }, + { 94584, true }, + { 94602, true }, + { 94617, true }, + { 94628, true }, + { 94641, true }, + { 94648, true }, + { 94665, false }, + { 94676, true }, + { 94686, true }, + { 94696, true }, + { 94707, true }, + { 94716, true }, + { 94738, true }, + { 94763, true }, + { 94782, true }, + { 94789, true }, + { 94803, true }, + { 94818, true }, + { 94828, true }, + { 94852, true }, + { 94868, true }, + { 94890, true }, + { 94904, true }, + { 94917, true }, + { 94931, true }, + { 94954, true }, + { 94965, true }, + { 94974, true }, + { 94985, true }, + { 94999, true }, { 95010, true }, - { 95026, true }, - { 95039, true }, - { 95051, true }, - { 95064, true }, - { 95072, true }, - { 95084, true }, - { 95093, true }, - { 95108, true }, + { 95022, true }, + { 95041, true }, + { 95054, true }, + { 95063, true }, + { 95079, true }, + { 95092, true }, + { 95104, true }, { 95117, true }, - { 95129, true }, - { 95139, true }, - { 95154, true }, - { 95162, true }, - { 95177, true }, - { 95188, true }, - { 95199, true }, - { 95208, true }, - { 95223, true }, - { 95237, true }, - { 95251, true }, - { 95274, true }, - { 95299, true }, - { 95318, true }, - { 95332, true }, - { 95348, true }, - { 95362, true }, - { 95378, true }, - { 95396, true }, - { 95413, true }, - { 95428, true }, - { 95443, true }, - { 95452, true }, - { 95465, true }, - { 95482, true }, - { 95495, true }, + { 95125, true }, + { 95137, true }, + { 95146, true }, + { 95161, true }, + { 95170, true }, + { 95182, true }, + { 95192, true }, + { 95207, true }, + { 95215, true }, + { 95230, true }, + { 95241, true }, + { 95252, true }, + { 95261, true }, + { 95276, true }, + { 95290, true }, + { 95304, true }, + { 95327, true }, + { 95352, true }, + { 95371, true }, + { 95385, true }, + { 95401, true }, + { 95415, true }, + { 95431, true }, + { 95449, true }, + { 95466, true }, + { 95481, true }, + { 95496, true }, { 95505, true }, - { 95516, true }, - { 95527, true }, - { 95537, true }, - { 95549, true }, - { 95570, true }, - { 95584, false }, - { 95604, false }, - { 95616, true }, - { 95629, true }, - { 95639, true }, - { 95652, true }, - { 95665, true }, - { 95681, true }, - { 95698, true }, - { 95710, true }, - { 95724, true }, - { 95738, true }, - { 95754, true }, - { 95766, true }, - { 95792, true }, - { 95813, true }, - { 95834, false }, - { 95848, true }, + { 95518, true }, + { 95535, true }, + { 95548, true }, + { 95558, true }, + { 95569, true }, + { 95580, true }, + { 95590, true }, + { 95602, true }, + { 95623, true }, + { 95637, false }, + { 95657, false }, + { 95669, true }, + { 95682, true }, + { 95692, true }, + { 95705, true }, + { 95718, true }, + { 95734, true }, + { 95751, true }, + { 95763, true }, + { 95777, true }, + { 95791, true }, + { 95807, true }, + { 95819, true }, + { 95845, true }, { 95866, true }, - { 95883, true }, - { 95895, true }, - { 95915, true }, - { 95931, true }, - { 95943, true }, - { 95965, true }, - { 95987, true }, - { 96006, true }, - { 96023, true }, - { 96035, true }, - { 96046, true }, + { 95887, false }, + { 95901, true }, + { 95919, true }, + { 95936, true }, + { 95948, true }, + { 95968, true }, + { 95984, true }, + { 95996, true }, + { 96018, true }, + { 96040, true }, { 96059, true }, - { 96079, true }, - { 96090, true }, - { 96105, true }, - { 96122, true }, + { 96076, true }, + { 96088, true }, + { 96099, true }, + { 96112, true }, + { 96132, true }, { 96143, true }, - { 96163, true }, - { 96185, false }, - { 96198, true }, - { 96209, true }, - { 96225, true }, - { 96240, true }, - { 96255, true }, - { 96275, true }, - { 96287, true }, - { 96305, true }, - { 96330, true }, - { 96353, true }, - { 96369, true }, - { 96386, true }, - { 96397, true }, - { 96411, true }, - { 96427, false }, - { 96440, true }, - { 96453, true }, - { 96465, true }, - { 96476, true }, + { 96158, true }, + { 96175, true }, + { 96196, true }, + { 96216, true }, + { 96238, false }, + { 96251, true }, + { 96262, true }, + { 96278, true }, + { 96293, true }, + { 96308, true }, + { 96328, true }, + { 96340, true }, + { 96358, true }, + { 96383, true }, + { 96406, true }, + { 96422, true }, + { 96439, true }, + { 96450, true }, + { 96464, true }, + { 96480, false }, { 96493, true }, - { 96505, true }, - { 96515, false }, - { 96524, true }, - { 96534, true }, - { 96545, true }, - { 96568, true }, - { 96581, true }, - { 96592, true }, - { 96606, true }, - { 96622, true }, - { 96630, true }, - { 96649, true }, - { 96662, true }, - { 96685, true }, - { 96699, true }, - { 96714, true }, - { 96724, true }, - { 96737, true }, + { 96506, true }, + { 96518, true }, + { 96529, true }, + { 96546, true }, + { 96558, true }, + { 96568, false }, + { 96577, true }, + { 96587, true }, + { 96598, true }, + { 96621, true }, + { 96634, true }, + { 96645, true }, + { 96659, true }, + { 96675, true }, + { 96683, true }, + { 96702, true }, + { 96715, true }, + { 96738, true }, { 96752, true }, - { 96768, true }, - { 96784, true }, - { 96801, true }, - { 96814, true }, - { 96826, true }, - { 96839, true }, - { 96851, true }, - { 96866, true }, - { 96883, true }, - { 96892, true }, - { 96919, true }, - { 96940, true }, - { 96958, true }, - { 96975, true }, - { 96986, false }, - { 97004, true }, - { 97019, true }, - { 97031, true }, - { 97043, true }, - { 97062, true }, - { 97097, true }, - { 97120, true }, - { 97142, true }, - { 97156, true }, - { 97173, true }, - { 97186, true }, - { 97198, true }, - { 97215, true }, - { 97232, false }, - { 97251, true }, - { 97269, true }, - { 97300, true }, - { 97315, true }, - { 97328, true }, - { 97350, true }, - { 97362, true }, - { 97379, true }, - { 97396, true }, - { 97418, true }, + { 96767, true }, + { 96777, true }, + { 96790, true }, + { 96805, true }, + { 96824, true }, + { 96840, true }, + { 96856, true }, + { 96873, true }, + { 96886, true }, + { 96898, true }, + { 96911, true }, + { 96923, true }, + { 96938, true }, + { 96955, true }, + { 96964, true }, + { 96991, true }, + { 97012, true }, + { 97030, true }, + { 97047, true }, + { 97058, false }, + { 97076, true }, + { 97091, true }, + { 97103, true }, + { 97115, true }, + { 97127, true }, + { 97146, true }, + { 97181, true }, + { 97204, true }, + { 97226, true }, + { 97240, true }, + { 97257, true }, + { 97270, true }, + { 97282, true }, + { 97299, true }, + { 97316, false }, + { 97335, true }, + { 97353, true }, + { 97384, true }, + { 97399, true }, + { 97412, true }, { 97434, true }, - { 97447, true }, - { 97459, true }, + { 97446, true }, + { 97463, true }, { 97480, true }, - { 97499, true }, - { 97511, true }, - { 97528, true }, + { 97502, true }, + { 97518, true }, + { 97531, true }, { 97543, true }, - { 97560, true }, - { 97577, true }, - { 97593, true }, - { 97608, true }, - { 97624, true }, - { 97640, true }, - { 97664, true }, - { 97689, true }, - { 97711, true }, - { 97726, true }, - { 97753, true }, - { 97771, true }, - { 97788, true }, - { 97814, true }, - { 97829, true }, - { 97847, true }, - { 97868, true }, - { 97896, true }, - { 97915, true }, - { 97939, true }, - { 97963, true }, - { 97976, true }, - { 97989, true }, - { 98006, true }, - { 98021, true }, - { 98046, false }, + { 97564, true }, + { 97583, true }, + { 97595, true }, + { 97612, true }, + { 97627, true }, + { 97644, true }, + { 97661, true }, + { 97677, true }, + { 97692, true }, + { 97708, true }, + { 97724, true }, + { 97748, true }, + { 97773, true }, + { 97795, true }, + { 97810, true }, + { 97837, true }, + { 97855, true }, + { 97872, true }, + { 97898, true }, + { 97913, true }, + { 97931, true }, + { 97952, true }, + { 97980, true }, + { 97999, true }, + { 98023, true }, + { 98047, true }, { 98060, true }, - { 98070, true }, - { 98089, true }, + { 98073, true }, + { 98090, true }, { 98105, true }, - { 98129, true }, + { 98130, false }, { 98144, true }, - { 98161, true }, - { 98170, true }, - { 98185, true }, - { 98195, true }, - { 98207, true }, + { 98154, true }, + { 98173, true }, + { 98189, true }, + { 98213, true }, { 98228, true }, - { 98241, true }, + { 98245, false }, { 98254, true }, - { 98272, true }, - { 98285, true }, - { 98299, true }, - { 98318, true }, - { 98328, true }, - { 98344, true }, - { 98360, true }, - { 98373, true }, - { 98392, true }, - { 98410, true }, - { 98424, true }, - { 98434, false }, - { 98446, true }, - { 98454, true }, - { 98464, true }, - { 98474, true }, - { 98486, true }, - { 98500, false }, - { 98513, true }, - { 98521, true }, - { 98532, true }, - { 98543, true }, - { 98551, true }, - { 98567, true }, - { 98579, true }, - { 98588, true }, - { 98604, false }, - { 98611, true }, - { 98619, true }, - { 98629, true }, - { 98641, true }, - { 98655, true }, - { 98664, true }, - { 98680, true }, - { 98688, true }, - { 98697, true }, + { 98269, true }, + { 98279, true }, + { 98291, true }, + { 98312, true }, + { 98325, true }, + { 98338, true }, + { 98356, true }, + { 98369, true }, + { 98383, true }, + { 98402, true }, + { 98412, true }, + { 98428, true }, + { 98444, true }, + { 98457, true }, + { 98476, true }, + { 98494, true }, + { 98508, true }, + { 98518, false }, + { 98530, true }, + { 98538, true }, + { 98548, true }, + { 98558, true }, + { 98570, true }, + { 98584, false }, + { 98597, true }, + { 98605, true }, + { 98616, true }, + { 98627, true }, + { 98635, true }, + { 98651, true }, + { 98663, true }, + { 98672, true }, + { 98688, false }, + { 98695, true }, + { 98703, true }, { 98713, true }, - { 98723, false }, - { 98741, true }, - { 98753, true }, - { 98765, false }, - { 98776, true }, - { 98789, true }, - { 98799, true }, - { 98809, true }, - { 98819, true }, - { 98829, true }, - { 98839, true }, - { 98858, true }, - { 98867, true }, - { 98876, true }, - { 98896, true }, - { 98912, true }, - { 98920, true }, - { 98941, true }, - { 98949, true }, - { 98965, true }, - { 98982, true }, - { 98990, true }, - { 99001, true }, - { 99013, true }, - { 99024, true }, - { 99039, true }, - { 99050, true }, - { 99060, true }, - { 99069, true }, - { 99078, true }, - { 99096, true }, - { 99112, true }, - { 99126, true }, - { 99154, true }, - { 99167, true }, - { 99176, true }, - { 99195, true }, + { 98725, true }, + { 98739, true }, + { 98748, true }, + { 98764, true }, + { 98772, true }, + { 98781, true }, + { 98797, true }, + { 98807, false }, + { 98825, true }, + { 98837, true }, + { 98849, false }, + { 98860, true }, + { 98873, true }, + { 98883, true }, + { 98893, true }, + { 98903, true }, + { 98913, true }, + { 98923, true }, + { 98942, true }, + { 98951, true }, + { 98960, true }, + { 98980, true }, + { 98996, true }, + { 99004, true }, + { 99025, true }, + { 99033, true }, + { 99049, true }, + { 99066, true }, + { 99074, true }, + { 99085, true }, + { 99097, true }, + { 99108, true }, + { 99123, true }, + { 99134, true }, + { 99144, true }, + { 99153, true }, + { 99162, true }, + { 99180, true }, + { 99196, true }, { 99210, true }, - { 99227, true }, - { 99250, true }, - { 99269, true }, - { 99278, true }, - { 99296, true }, + { 99238, true }, + { 99251, true }, + { 99260, true }, + { 99279, true }, + { 99294, true }, { 99311, true }, - { 99325, true }, - { 99348, true }, - { 99370, true }, + { 99334, true }, + { 99353, true }, + { 99362, true }, { 99380, true }, - { 99396, true }, - { 99412, true }, - { 99420, true }, - { 99430, true }, - { 99442, true }, - { 99455, true }, - { 99472, true }, - { 99489, true }, - { 99500, true }, - { 99518, true }, - { 99532, true }, - { 99546, true }, - { 99564, true }, - { 99583, true }, - { 99599, true }, - { 99610, true }, - { 99621, true }, - { 99639, true }, - { 99652, true }, - { 99663, true }, - { 99673, true }, - { 99686, true }, - { 99698, true }, - { 99709, true }, - { 99720, true }, - { 99730, true }, - { 99739, true }, - { 99756, true }, - { 99775, true }, - { 99788, true }, - { 99807, true }, - { 99824, true }, - { 99849, true }, - { 99881, true }, - { 99895, true }, - { 99907, true }, - { 99931, true }, - { 99954, true }, - { 99986, true }, - { 100011, true }, - { 100024, true }, - { 100050, true }, - { 100069, true }, - { 100083, true }, - { 100097, true }, - { 100110, true }, - { 100125, true }, - { 100140, true }, - { 100154, true }, - { 100168, false }, - { 100188, true }, - { 100201, true }, - { 100218, true }, - { 100233, true }, - { 100250, true }, - { 100259, true }, - { 100268, true }, - { 100284, true }, - { 100304, true }, - { 100323, true }, - { 100332, true }, - { 100341, true }, + { 99395, true }, + { 99409, true }, + { 99432, true }, + { 99454, true }, + { 99464, true }, + { 99480, true }, + { 99496, true }, + { 99504, true }, + { 99514, true }, + { 99526, true }, + { 99539, true }, + { 99556, true }, + { 99573, true }, + { 99584, true }, + { 99602, true }, + { 99616, true }, + { 99630, true }, + { 99648, true }, + { 99667, true }, + { 99683, true }, + { 99694, true }, + { 99705, true }, + { 99723, true }, + { 99736, true }, + { 99747, true }, + { 99757, true }, + { 99770, true }, + { 99782, true }, + { 99793, true }, + { 99804, true }, + { 99814, true }, + { 99823, true }, + { 99840, true }, + { 99859, true }, + { 99872, true }, + { 99891, true }, + { 99908, true }, + { 99933, true }, + { 99965, true }, + { 99979, true }, + { 99991, true }, + { 100015, true }, + { 100038, true }, + { 100070, true }, + { 100095, true }, + { 100108, true }, + { 100134, true }, + { 100153, true }, + { 100167, true }, + { 100181, true }, + { 100194, true }, + { 100209, true }, + { 100224, true }, + { 100238, true }, + { 100252, false }, + { 100272, true }, + { 100285, true }, + { 100302, true }, + { 100317, true }, + { 100334, true }, + { 100343, true }, { 100352, true }, - { 100361, true }, - { 100369, true }, - { 100378, true }, - { 100389, true }, - { 100402, true }, - { 100414, true }, - { 100427, true }, + { 100368, true }, + { 100388, true }, + { 100407, true }, + { 100416, true }, + { 100425, true }, { 100436, true }, - { 100449, true }, - { 100459, true }, - { 100472, true }, - { 100485, true }, - { 100496, true }, - { 100507, true }, - { 100518, true }, - { 100527, true }, - { 100536, true }, - { 100546, true }, - { 100563, true }, + { 100445, true }, + { 100453, true }, + { 100462, true }, + { 100473, true }, + { 100486, true }, + { 100498, true }, + { 100511, true }, + { 100520, true }, + { 100533, true }, + { 100543, true }, + { 100556, true }, + { 100569, true }, { 100580, true }, - { 100589, true }, - { 100604, true }, - { 100623, false }, - { 100635, true }, - { 100648, true }, - { 100665, false }, - { 100678, true }, - { 100687, true }, - { 100701, true }, - { 100724, false }, - { 100736, true }, - { 100747, true }, - { 100764, true }, - { 100778, true }, - { 100789, true }, - { 100806, true }, - { 100827, true }, - { 100838, true }, - { 100849, true }, - { 100856, true }, - { 100867, true }, - { 100874, true }, - { 100884, true }, - { 100896, true }, - { 100906, true }, - { 100915, true }, - { 100928, true }, + { 100591, true }, + { 100602, true }, + { 100611, true }, + { 100620, true }, + { 100630, true }, + { 100647, true }, + { 100664, true }, + { 100673, true }, + { 100688, true }, + { 100707, false }, + { 100719, true }, + { 100732, true }, + { 100749, false }, + { 100762, true }, + { 100771, true }, + { 100785, true }, + { 100808, false }, + { 100820, true }, + { 100831, true }, + { 100848, true }, + { 100862, true }, + { 100873, true }, + { 100890, true }, + { 100911, true }, + { 100922, true }, + { 100933, true }, { 100940, true }, - { 100957, true }, - { 100971, true }, - { 100985, true }, - { 100992, true }, + { 100951, true }, + { 100958, true }, + { 100968, true }, + { 100980, true }, + { 100990, true }, { 100999, true }, - { 101006, true }, - { 101015, true }, + { 101012, true }, { 101024, true }, - { 101032, true }, - { 101042, true }, - { 101060, true }, - { 101074, true }, - { 101086, true }, - { 101097, true }, + { 101041, true }, + { 101055, true }, + { 101069, true }, + { 101076, true }, + { 101083, true }, + { 101090, true }, + { 101099, true }, { 101108, true }, - { 101119, true }, - { 101132, true }, - { 101143, true }, - { 101152, true }, - { 101169, true }, - { 101180, true }, - { 101196, true }, + { 101116, true }, + { 101126, true }, + { 101144, true }, + { 101158, true }, + { 101170, true }, + { 101181, true }, + { 101192, true }, { 101203, true }, - { 101210, true }, - { 101224, true }, - { 101232, true }, - { 101239, true }, - { 101250, true }, - { 101256, true }, - { 101269, true }, - { 101282, true }, - { 101292, true }, - { 101302, true }, - { 101315, true }, - { 101329, true }, - { 101344, true }, - { 101357, true }, + { 101216, true }, + { 101227, true }, + { 101236, true }, + { 101253, true }, + { 101264, true }, + { 101280, true }, + { 101287, true }, + { 101294, true }, + { 101308, true }, + { 101316, true }, + { 101323, true }, + { 101334, true }, + { 101340, true }, + { 101353, true }, { 101366, true }, - { 101385, true }, - { 101410, false }, - { 101422, true }, - { 101430, true }, - { 101444, true }, - { 101457, true }, - { 101472, true }, - { 101491, true }, - { 101504, true }, - { 101519, true }, - { 101532, true }, - { 101543, true }, + { 101376, true }, + { 101386, true }, + { 101399, true }, + { 101413, true }, + { 101428, true }, + { 101441, true }, + { 101450, true }, + { 101469, true }, + { 101494, false }, + { 101506, true }, + { 101514, true }, + { 101528, true }, + { 101541, true }, { 101556, true }, - { 101573, true }, - { 101587, false }, - { 101606, true }, - { 101621, true }, - { 101635, true }, - { 101651, true }, - { 101667, true }, - { 101687, true }, + { 101575, true }, + { 101588, true }, + { 101603, true }, + { 101616, true }, + { 101627, true }, + { 101640, true }, + { 101657, true }, + { 101671, false }, + { 101690, true }, { 101705, true }, - { 101715, true }, - { 101724, true }, - { 101740, true }, - { 101755, true }, - { 101775, true }, - { 101794, true }, - { 101811, true }, - { 101827, true }, - { 101847, true }, - { 101860, true }, - { 101874, false }, - { 101887, true }, - { 101897, true }, - { 101909, true }, - { 101926, true }, - { 101941, true }, - { 101964, true }, + { 101719, true }, + { 101735, true }, + { 101751, true }, + { 101771, true }, + { 101789, true }, + { 101799, true }, + { 101808, true }, + { 101824, true }, + { 101839, true }, + { 101859, true }, + { 101878, true }, + { 101895, true }, + { 101911, true }, + { 101931, true }, + { 101944, true }, + { 101958, false }, + { 101971, true }, { 101981, true }, - { 101995, true }, - { 102007, true }, - { 102022, true }, - { 102039, true }, - { 102053, true }, - { 102068, true }, - { 102077, true }, - { 102092, true }, - { 102110, true }, - { 102124, true }, - { 102134, true }, - { 102145, true }, - { 102155, true }, - { 102170, true }, - { 102184, true }, - { 102197, true }, + { 101993, true }, + { 102010, true }, + { 102025, true }, + { 102048, true }, + { 102065, true }, + { 102079, true }, + { 102091, true }, + { 102106, true }, + { 102123, true }, + { 102137, true }, + { 102152, true }, + { 102161, true }, + { 102176, true }, + { 102194, true }, { 102208, true }, - { 102225, true }, + { 102218, true }, + { 102229, true }, { 102239, true }, - { 102249, true }, - { 102261, true }, - { 102279, true }, - { 102293, true }, - { 102305, false }, - { 102320, true }, - { 102339, true }, - { 102350, true }, - { 102362, true }, - { 102380, true }, - { 102393, true }, - { 102410, true }, - { 102426, true }, - { 102445, true }, - { 102462, true }, - { 102480, true }, - { 102502, true }, - { 102521, true }, - { 102534, true }, - { 102550, true }, - { 102563, true }, - { 102578, true }, + { 102254, true }, + { 102268, true }, + { 102281, true }, + { 102292, true }, + { 102309, true }, + { 102323, true }, + { 102333, true }, + { 102345, true }, + { 102363, true }, + { 102377, true }, + { 102389, false }, + { 102404, true }, + { 102423, true }, + { 102434, true }, + { 102446, true }, + { 102464, true }, + { 102477, true }, + { 102494, true }, + { 102510, true }, + { 102529, true }, + { 102546, true }, + { 102564, true }, { 102586, true }, - { 102599, true }, - { 102613, true }, - { 102627, true }, - { 102638, true }, - { 102648, true }, - { 102666, true }, - { 102684, true }, + { 102605, true }, + { 102618, true }, + { 102634, true }, + { 102647, true }, + { 102662, true }, + { 102670, true }, + { 102683, true }, { 102697, true }, - { 102705, true }, - { 102713, true }, - { 102726, true }, - { 102738, true }, - { 102749, true }, - { 102764, true }, - { 102774, true }, - { 102785, true }, - { 102793, true }, - { 102808, true }, - { 102815, true }, - { 102831, true }, - { 102853, true }, + { 102711, true }, + { 102722, true }, + { 102732, true }, + { 102750, true }, + { 102768, true }, + { 102781, true }, + { 102789, true }, + { 102797, true }, + { 102810, true }, + { 102822, true }, + { 102833, true }, + { 102848, true }, + { 102858, true }, { 102869, true }, - { 102878, true }, - { 102888, true }, - { 102900, true }, - { 102913, true }, - { 102931, true }, - { 102945, true }, - { 102964, true }, - { 102978, true }, - { 102991, true }, - { 103007, false }, - { 103024, true }, - { 103045, true }, - { 103064, true }, - { 103083, true }, - { 103102, true }, - { 103118, true }, - { 103133, true }, - { 103143, true }, - { 103153, true }, - { 103162, true }, - { 103175, true }, - { 103185, false }, - { 103203, true }, - { 103225, true }, - { 103242, true }, - { 103258, true }, - { 103276, true }, + { 102877, true }, + { 102892, true }, + { 102899, true }, + { 102915, true }, + { 102937, true }, + { 102953, true }, + { 102962, true }, + { 102972, true }, + { 102984, true }, + { 102997, true }, + { 103015, true }, + { 103029, true }, + { 103048, true }, + { 103062, true }, + { 103075, true }, + { 103091, false }, + { 103108, true }, + { 103129, true }, + { 103148, true }, + { 103167, true }, + { 103186, true }, + { 103202, true }, + { 103217, true }, + { 103227, true }, + { 103237, true }, + { 103246, true }, + { 103259, true }, + { 103269, false }, { 103287, true }, - { 103303, true }, - { 103321, true }, - { 103336, false }, - { 103350, true }, - { 103367, true }, - { 103385, true }, - { 103404, true }, - { 103415, true }, - { 103431, true }, - { 103448, true }, - { 103464, true }, - { 103477, true }, - { 103495, true }, - { 103506, true }, - { 103523, true }, - { 103545, false }, - { 103562, true }, - { 103578, true }, - { 103592, true }, - { 103604, true }, - { 103626, false }, - { 103641, true }, - { 103653, true }, - { 103661, true }, - { 103674, true }, - { 103689, true }, - { 103704, true }, - { 103714, true }, - { 103724, true }, - { 103734, true }, - { 103748, true }, - { 103762, true }, - { 103773, false }, - { 103786, true }, - { 103794, true }, - { 103803, true }, - { 103816, true }, - { 103825, true }, - { 103835, true }, - { 103848, true }, - { 103868, false }, + { 103309, true }, + { 103326, true }, + { 103342, true }, + { 103360, true }, + { 103371, true }, + { 103387, true }, + { 103405, true }, + { 103420, false }, + { 103434, true }, + { 103451, true }, + { 103469, true }, + { 103488, true }, + { 103499, true }, + { 103515, true }, + { 103532, true }, + { 103548, true }, + { 103561, true }, + { 103579, true }, + { 103590, true }, + { 103607, true }, + { 103629, false }, + { 103646, true }, + { 103662, true }, + { 103676, true }, + { 103688, true }, + { 103710, false }, + { 103725, true }, + { 103737, true }, + { 103745, true }, + { 103758, true }, + { 103773, true }, + { 103788, true }, + { 103798, true }, + { 103808, true }, + { 103818, true }, + { 103832, true }, + { 103846, true }, + { 103857, false }, + { 103870, true }, { 103878, true }, - { 103894, true }, - { 103907, true }, - { 103920, true }, - { 103931, true }, - { 103940, true }, - { 103947, true }, - { 103963, true }, - { 103976, true }, - { 103989, true }, - { 104002, true }, - { 104017, true }, - { 104028, true }, - { 104048, true }, + { 103887, true }, + { 103900, true }, + { 103909, true }, + { 103919, true }, + { 103932, true }, + { 103952, false }, + { 103962, true }, + { 103978, true }, + { 103991, true }, + { 104004, true }, + { 104015, true }, + { 104024, true }, + { 104031, true }, + { 104047, true }, { 104060, true }, - { 104067, true }, - { 104074, true }, - { 104083, true }, - { 104092, true }, + { 104073, true }, + { 104086, true }, { 104101, true }, { 104112, true }, - { 104126, true }, - { 104139, true }, - { 104147, true }, - { 104166, true }, - { 104177, true }, - { 104189, true }, - { 104203, true }, - { 104214, true }, - { 104230, true }, - { 104244, true }, - { 104259, true }, - { 104269, false }, - { 104283, true }, - { 104293, true }, - { 104308, false }, - { 104324, true }, - { 104336, true }, - { 104349, true }, - { 104368, true }, + { 104132, true }, + { 104144, true }, + { 104151, true }, + { 104158, true }, + { 104167, true }, + { 104176, true }, + { 104185, true }, + { 104196, true }, + { 104210, true }, + { 104223, true }, + { 104231, true }, + { 104250, true }, + { 104261, true }, + { 104273, true }, + { 104287, true }, + { 104298, true }, + { 104314, true }, + { 104328, true }, + { 104343, true }, + { 104353, false }, + { 104367, true }, + { 104377, true }, { 104392, false }, - { 104405, true }, - { 104421, true }, - { 104435, true }, - { 104450, true }, - { 104469, true }, - { 104486, true }, - { 104503, true }, - { 104513, true }, - { 104528, true }, - { 104542, true }, - { 104555, true }, - { 104571, true }, - { 104586, true }, - { 104602, true }, - { 104616, true }, - { 104631, true }, - { 104645, true }, - { 104660, true }, - { 104679, true }, - { 104694, true }, - { 104709, true }, - { 104727, true }, - { 104746, true }, - { 104759, true }, - { 104772, false }, - { 104795, true }, + { 104408, true }, + { 104420, true }, + { 104433, true }, + { 104452, true }, + { 104476, false }, + { 104489, true }, + { 104505, true }, + { 104519, true }, + { 104534, true }, + { 104553, true }, + { 104570, true }, + { 104587, true }, + { 104597, true }, + { 104612, true }, + { 104626, true }, + { 104639, true }, + { 104655, true }, + { 104670, true }, + { 104686, true }, + { 104700, true }, + { 104715, true }, + { 104729, true }, + { 104744, true }, + { 104763, true }, + { 104778, true }, + { 104793, true }, { 104811, true }, - { 104822, true }, - { 104835, true }, - { 104850, true }, - { 104865, true }, - { 104881, true }, - { 104896, true }, - { 104912, true }, - { 104929, true }, - { 104941, true }, - { 104951, true }, - { 104969, true }, - { 104979, true }, - { 104990, true }, - { 105000, true }, - { 105014, true }, - { 105027, true }, - { 105038, true }, - { 105049, true }, - { 105060, true }, - { 105073, true }, - { 105086, true }, - { 105103, true }, - { 105117, false }, - { 105134, true }, - { 105148, true }, - { 105165, true }, - { 105182, true }, - { 105194, true }, - { 105205, true }, - { 105219, true }, - { 105231, true }, - { 105247, true }, - { 105273, true }, - { 105283, true }, - { 105296, true }, + { 104830, true }, + { 104843, true }, + { 104856, false }, + { 104879, true }, + { 104895, true }, + { 104906, true }, + { 104919, true }, + { 104934, true }, + { 104949, true }, + { 104965, true }, + { 104980, true }, + { 104996, true }, + { 105013, true }, + { 105025, true }, + { 105035, true }, + { 105053, true }, + { 105063, true }, + { 105074, true }, + { 105084, true }, + { 105098, true }, + { 105111, true }, + { 105139, true }, + { 105150, true }, + { 105161, true }, + { 105172, true }, + { 105185, true }, + { 105198, true }, + { 105215, true }, + { 105229, false }, + { 105246, true }, + { 105260, true }, + { 105277, true }, + { 105294, true }, { 105306, true }, - { 105319, true }, - { 105327, true }, - { 105338, true }, - { 105358, true }, - { 105376, true }, - { 105393, true }, + { 105317, true }, + { 105331, true }, + { 105343, true }, + { 105359, true }, + { 105385, true }, + { 105395, true }, { 105408, true }, - { 105426, true }, - { 105442, true }, - { 105456, true }, - { 105473, true }, - { 105489, true }, - { 105502, true }, - { 105512, false }, - { 105526, true }, - { 105537, true }, - { 105553, true }, - { 105561, true }, - { 105571, true }, - { 105586, true }, - { 105602, true }, - { 105621, true }, - { 105634, true }, - { 105654, true }, - { 105669, true }, - { 105687, true }, - { 105700, true }, - { 105710, true }, - { 105727, true }, - { 105742, true }, - { 105753, true }, - { 105772, true }, - { 105783, true }, - { 105796, true }, - { 105804, true }, - { 105813, true }, - { 105824, true }, - { 105838, true }, - { 105848, true }, - { 105871, true }, + { 105418, true }, + { 105431, true }, + { 105439, true }, + { 105450, true }, + { 105470, true }, + { 105488, true }, + { 105505, true }, + { 105520, true }, + { 105538, true }, + { 105554, true }, + { 105568, true }, + { 105585, true }, + { 105601, true }, + { 105614, true }, + { 105624, false }, + { 105638, true }, + { 105649, true }, + { 105665, true }, + { 105673, true }, + { 105683, true }, + { 105698, true }, + { 105714, true }, + { 105733, true }, + { 105746, true }, + { 105766, true }, + { 105781, true }, + { 105799, true }, + { 105812, true }, + { 105822, true }, + { 105839, true }, + { 105854, true }, + { 105865, true }, { 105884, true }, - { 105896, false }, - { 105907, true }, - { 105921, true }, - { 105949, true }, - { 105958, true }, - { 105973, true }, - { 105992, true }, - { 106007, true }, - { 106027, true }, - { 106045, true }, - { 106058, true }, - { 106074, true }, - { 106089, true }, - { 106102, true }, - { 106116, true }, - { 106127, true }, - { 106138, true }, - { 106152, true }, - { 106164, true }, + { 105895, true }, + { 105908, true }, + { 105916, true }, + { 105925, true }, + { 105936, true }, + { 105950, true }, + { 105960, true }, + { 105983, true }, + { 105996, true }, + { 106008, false }, + { 106019, true }, + { 106033, true }, + { 106061, true }, + { 106070, true }, + { 106085, true }, + { 106104, true }, + { 106128, true }, + { 106143, true }, + { 106163, true }, { 106181, true }, - { 106191, true }, - { 106204, true }, - { 106219, true }, - { 106227, true }, - { 106247, true }, - { 106258, true }, - { 106268, true }, - { 106284, true }, - { 106293, true }, - { 106304, true }, + { 106194, true }, + { 106210, true }, + { 106225, true }, + { 106238, true }, + { 106252, true }, + { 106263, true }, + { 106274, true }, + { 106288, true }, + { 106300, true }, { 106317, true }, { 106327, true }, - { 106339, true }, - { 106354, true }, + { 106340, true }, + { 106355, true }, { 106363, true }, - { 106377, true }, - { 106390, true }, - { 106400, true }, - { 106415, true }, + { 106383, true }, + { 106394, true }, + { 106404, true }, + { 106420, true }, { 106429, true }, { 106440, true }, - { 106455, true }, - { 106465, false }, + { 106453, true }, + { 106463, true }, { 106475, true }, - { 106494, true }, - { 106507, true }, - { 106516, true }, - { 106527, true }, - { 106541, true }, - { 106561, true }, - { 106577, true }, - { 106588, true }, - { 106604, true }, - { 106621, true }, - { 106636, true }, - { 106657, true }, - { 106670, true }, - { 106687, true }, + { 106490, true }, + { 106499, true }, + { 106513, true }, + { 106526, true }, + { 106536, true }, + { 106551, true }, + { 106565, true }, + { 106576, true }, + { 106591, true }, + { 106601, false }, + { 106611, true }, + { 106630, true }, + { 106643, true }, + { 106652, true }, + { 106663, true }, + { 106677, true }, { 106697, true }, - { 106707, true }, - { 106715, true }, - { 106726, true }, - { 106736, true }, - { 106751, true }, - { 106764, true }, - { 106778, true }, - { 106790, true }, - { 106800, true }, - { 106808, true }, - { 106827, true }, - { 106847, true }, - { 106856, true }, - { 106870, true }, - { 106884, true }, - { 106926, true }, + { 106713, true }, + { 106724, true }, + { 106740, true }, + { 106757, true }, + { 106772, true }, + { 106785, true }, + { 106802, true }, + { 106812, true }, + { 106822, true }, + { 106830, true }, + { 106841, true }, + { 106851, true }, + { 106866, true }, + { 106879, true }, + { 106893, true }, + { 106905, true }, + { 106915, true }, + { 106923, true }, { 106942, true }, - { 106951, true }, - { 106963, true }, - { 106975, true }, - { 106988, true }, - { 107001, true }, - { 107019, true }, - { 107027, true }, - { 107040, true }, - { 107051, true }, - { 107065, true }, - { 107075, true }, - { 107085, true }, - { 107097, true }, - { 107108, true }, - { 107125, true }, - { 107140, true }, - { 107152, true }, - { 107165, true }, - { 107177, true }, - { 107192, true }, - { 107205, true }, - { 107217, true }, - { 107227, true }, - { 107243, true }, - { 107252, true }, - { 107273, true }, - { 107286, true }, - { 107304, true }, - { 107319, true }, - { 107333, true }, - { 107351, true }, - { 107369, true }, - { 107381, true }, - { 107392, true }, - { 107410, true }, - { 107421, true }, - { 107435, true }, - { 107455, true }, - { 107468, true }, - { 107480, true }, - { 107500, true }, - { 107509, true }, - { 107518, true }, + { 106962, true }, + { 106971, true }, + { 106985, true }, + { 106999, true }, + { 107041, true }, + { 107057, true }, + { 107066, true }, + { 107078, true }, + { 107090, true }, + { 107103, true }, + { 107116, true }, + { 107134, true }, + { 107142, true }, + { 107155, true }, + { 107166, true }, + { 107180, true }, + { 107190, true }, + { 107200, true }, + { 107212, true }, + { 107223, true }, + { 107240, true }, + { 107255, true }, + { 107267, true }, + { 107280, true }, + { 107292, true }, + { 107307, true }, + { 107320, true }, + { 107332, true }, + { 107342, true }, + { 107358, true }, + { 107367, true }, + { 107388, true }, + { 107401, true }, + { 107419, true }, + { 107434, true }, + { 107448, true }, + { 107466, true }, + { 107484, true }, + { 107496, true }, + { 107507, true }, { 107525, true }, - { 107540, true }, - { 107555, true }, - { 107569, true }, - { 107588, true }, - { 107612, true }, - { 107623, true }, - { 107637, true }, - { 107649, true }, - { 107662, true }, - { 107675, true }, - { 107686, true }, - { 107699, true }, - { 107711, true }, - { 107734, true }, - { 107743, true }, - { 107760, true }, - { 107773, true }, - { 107785, true }, - { 107796, true }, - { 107811, true }, - { 107825, true }, - { 107833, true }, - { 107847, true }, - { 107861, true }, - { 107869, true }, - { 107882, true }, - { 107893, true }, - { 107905, true }, - { 107916, true }, + { 107536, true }, + { 107550, true }, + { 107570, true }, + { 107583, true }, + { 107595, true }, + { 107615, true }, + { 107624, true }, + { 107633, true }, + { 107640, true }, + { 107655, true }, + { 107670, true }, + { 107684, true }, + { 107703, true }, + { 107727, true }, + { 107738, true }, + { 107752, true }, + { 107764, true }, + { 107777, true }, + { 107790, true }, + { 107801, true }, + { 107814, true }, + { 107826, true }, + { 107849, true }, + { 107858, true }, + { 107875, true }, + { 107888, true }, + { 107900, true }, + { 107911, true }, + { 107926, true }, { 107940, true }, { 107948, true }, - { 107958, true }, - { 107968, true }, - { 107985, true }, - { 108003, true }, - { 108021, true }, - { 108035, true }, - { 108045, true }, - { 108069, true }, + { 107962, true }, + { 107976, true }, + { 107984, true }, + { 107997, true }, + { 108008, true }, + { 108020, true }, + { 108031, true }, + { 108055, true }, + { 108063, true }, + { 108073, true }, { 108083, true }, - { 108102, true }, - { 108114, true }, - { 108133, true }, + { 108100, true }, + { 108118, true }, + { 108136, true }, { 108150, true }, { 108160, true }, - { 108175, true }, - { 108195, true }, - { 108207, true }, - { 108219, true }, - { 108232, true }, - { 108241, true }, - { 108250, true }, - { 108259, true }, - { 108271, true }, - { 108278, true }, - { 108288, true }, - { 108297, true }, - { 108312, true }, - { 108327, false }, - { 108345, true }, + { 108184, true }, + { 108198, true }, + { 108217, true }, + { 108229, true }, + { 108248, true }, + { 108265, true }, + { 108275, true }, + { 108290, true }, + { 108310, true }, + { 108322, true }, + { 108334, true }, + { 108347, true }, { 108356, true }, - { 108368, true }, - { 108384, true }, - { 108398, true }, - { 108413, true }, - { 108429, true }, - { 108455, true }, - { 108466, true }, - { 108481, true }, - { 108496, true }, - { 108511, true }, - { 108529, true }, - { 108539, true }, - { 108554, true }, - { 108569, true }, - { 108582, true }, - { 108598, true }, - { 108621, true }, - { 108634, true }, - { 108647, true }, - { 108660, true }, - { 108679, true }, - { 108695, true }, - { 108710, true }, - { 108724, true }, - { 108736, false }, - { 108755, true }, - { 108770, true }, - { 108788, true }, - { 108799, true }, - { 108811, true }, - { 108822, true }, - { 108835, true }, - { 108858, true }, - { 108873, true }, - { 108888, true }, - { 108902, true }, - { 108919, true }, - { 108930, true }, - { 108938, true }, - { 108954, true }, - { 108967, true }, - { 108977, true }, + { 108365, true }, + { 108374, true }, + { 108386, true }, + { 108393, true }, + { 108403, true }, + { 108412, true }, + { 108427, true }, + { 108442, false }, + { 108460, true }, + { 108471, true }, + { 108483, true }, + { 108499, true }, + { 108513, true }, + { 108528, true }, + { 108544, true }, + { 108570, true }, + { 108581, true }, + { 108596, true }, + { 108611, true }, + { 108626, true }, + { 108644, true }, + { 108654, true }, + { 108669, true }, + { 108684, true }, + { 108697, true }, + { 108713, true }, + { 108736, true }, + { 108749, true }, + { 108762, true }, + { 108775, true }, + { 108794, true }, + { 108810, true }, + { 108825, true }, + { 108839, true }, + { 108851, false }, + { 108870, true }, + { 108885, true }, + { 108903, true }, + { 108914, true }, + { 108926, true }, + { 108937, true }, + { 108950, true }, + { 108973, true }, { 108988, true }, - { 108996, true }, - { 109013, true }, - { 109028, true }, - { 109038, true }, - { 109048, true }, - { 109059, true }, - { 109070, true }, - { 109090, true }, - { 109105, true }, - { 109122, true }, - { 109136, true }, - { 109152, true }, - { 109162, true }, - { 109173, true }, - { 109192, true }, - { 109203, true }, - { 109225, true }, - { 109239, true }, - { 109250, true }, - { 109263, true }, - { 109273, true }, - { 109291, true }, - { 109308, true }, - { 109322, true }, - { 109334, true }, - { 109350, true }, - { 109364, true }, - { 109375, true }, - { 109385, true }, - { 109397, true }, - { 109417, true }, - { 109444, true }, - { 109460, true }, - { 109475, true }, - { 109487, true }, - { 109503, true }, - { 109515, true }, + { 109003, true }, + { 109017, true }, + { 109034, true }, + { 109045, true }, + { 109053, true }, + { 109069, true }, + { 109082, true }, + { 109092, true }, + { 109103, true }, + { 109111, true }, + { 109128, true }, + { 109143, true }, + { 109153, true }, + { 109163, true }, + { 109174, true }, + { 109185, true }, + { 109205, true }, + { 109220, true }, + { 109237, true }, + { 109251, true }, + { 109267, true }, + { 109277, true }, + { 109288, true }, + { 109307, true }, + { 109318, true }, + { 109340, true }, + { 109354, true }, + { 109365, true }, + { 109378, true }, + { 109388, true }, + { 109406, true }, + { 109423, true }, + { 109437, true }, + { 109449, true }, + { 109465, true }, + { 109479, true }, + { 109490, true }, + { 109500, true }, + { 109512, true }, { 109532, true }, - { 109552, true }, - { 109562, true }, - { 109579, true }, - { 109593, true }, - { 109610, true }, - { 109622, true }, - { 109635, false }, - { 109649, true }, - { 109672, false }, - { 109686, true }, - { 109698, true }, - { 109709, true }, - { 109721, true }, - { 109739, true }, - { 109752, true }, - { 109767, true }, - { 109785, true }, - { 109795, true }, - { 109807, true }, - { 109840, true }, - { 109850, true }, - { 109859, true }, - { 109878, true }, - { 109890, true }, - { 109904, true }, - { 109925, true }, - { 109939, true }, - { 109953, true }, - { 109971, true }, - { 109989, true }, - { 110007, true }, + { 109559, true }, + { 109575, true }, + { 109590, true }, + { 109602, true }, + { 109618, true }, + { 109630, true }, + { 109647, true }, + { 109667, true }, + { 109677, true }, + { 109694, true }, + { 109708, true }, + { 109725, true }, + { 109737, true }, + { 109750, false }, + { 109764, true }, + { 109787, false }, + { 109801, true }, + { 109813, true }, + { 109824, true }, + { 109836, true }, + { 109854, true }, + { 109867, true }, + { 109882, true }, + { 109900, true }, + { 109910, true }, + { 109922, true }, + { 109955, true }, + { 109965, true }, + { 109974, true }, + { 109993, true }, + { 110005, true }, { 110019, true }, - { 110031, true }, - { 110039, true }, - { 110053, true }, - { 110069, true }, - { 110084, true }, - { 110098, true }, - { 110107, true }, - { 110117, true }, - { 110129, true }, - { 110144, true }, - { 110156, true }, - { 110179, true }, - { 110191, true }, - { 110204, true }, - { 110212, true }, - { 110223, true }, + { 110040, true }, + { 110054, true }, + { 110068, true }, + { 110086, true }, + { 110104, true }, + { 110122, true }, + { 110134, true }, + { 110146, true }, + { 110154, true }, + { 110168, true }, + { 110184, true }, + { 110199, true }, + { 110213, true }, + { 110222, true }, { 110232, true }, - { 110240, true }, - { 110253, true }, - { 110276, true }, - { 110288, true }, - { 110304, true }, + { 110244, true }, + { 110259, true }, + { 110271, true }, + { 110294, true }, + { 110306, true }, + { 110319, true }, { 110327, true }, { 110338, true }, - { 110354, true }, - { 110370, true }, - { 110385, true }, - { 110398, true }, - { 110408, true }, - { 110415, true }, - { 110428, true }, - { 110445, true }, - { 110468, true }, + { 110347, true }, + { 110355, true }, + { 110368, true }, + { 110391, true }, + { 110403, true }, + { 110419, true }, + { 110442, true }, + { 110453, true }, + { 110469, true }, { 110485, true }, - { 110503, true }, - { 110532, true }, - { 110549, true }, - { 110565, true }, - { 110575, true }, - { 110589, true }, - { 110603, true }, - { 110615, true }, - { 110624, true }, - { 110640, true }, - { 110657, true }, - { 110673, false }, - { 110688, true }, - { 110701, true }, - { 110712, true }, + { 110500, true }, + { 110513, true }, + { 110523, true }, + { 110530, true }, + { 110543, true }, + { 110560, true }, + { 110583, true }, + { 110600, true }, + { 110618, true }, + { 110647, true }, + { 110664, true }, + { 110680, true }, + { 110690, true }, + { 110704, true }, + { 110718, true }, { 110730, true }, - { 110744, true }, - { 110762, true }, - { 110780, true }, - { 110788, true }, - { 110798, true }, - { 110806, true }, + { 110739, true }, + { 110755, true }, + { 110772, true }, + { 110788, false }, + { 110803, true }, { 110816, true }, { 110827, true }, - { 110837, true }, - { 110851, true }, + { 110845, true }, { 110859, true }, - { 110871, true }, - { 110885, true }, + { 110877, true }, + { 110895, true }, { 110903, true }, - { 110912, true }, - { 110923, true }, - { 110938, true }, - { 110946, true }, - { 110961, true }, - { 110979, true }, - { 110997, true }, - { 111009, true }, - { 111019, true }, - { 111030, true }, - { 111044, true }, - { 111056, true }, - { 111067, false }, - { 111083, false }, - { 111104, true }, - { 111121, true }, - { 111139, true }, - { 111156, true }, - { 111173, true }, - { 111187, true }, - { 111199, true }, - { 111214, true }, - { 111222, true }, - { 111235, true }, - { 111253, true }, - { 111277, true }, - { 111294, true }, - { 111309, true }, - { 111322, false }, - { 111338, true }, - { 111351, true }, - { 111365, true }, - { 111377, true }, - { 111388, true }, - { 111399, true }, + { 110913, true }, + { 110921, true }, + { 110931, true }, + { 110942, true }, + { 110952, true }, + { 110966, true }, + { 110974, true }, + { 110986, true }, + { 111000, true }, + { 111018, true }, + { 111027, true }, + { 111038, true }, + { 111053, true }, + { 111061, true }, + { 111076, true }, + { 111094, true }, + { 111112, true }, + { 111124, true }, + { 111134, true }, + { 111145, true }, + { 111159, true }, + { 111171, true }, + { 111182, false }, + { 111198, false }, + { 111219, true }, + { 111236, true }, + { 111254, true }, + { 111271, true }, + { 111288, true }, + { 111302, true }, + { 111314, true }, + { 111329, true }, + { 111337, true }, + { 111350, true }, + { 111368, true }, + { 111392, true }, { 111409, true }, - { 111420, false }, - { 111441, true }, - { 111452, true }, + { 111424, true }, + { 111437, false }, + { 111453, true }, { 111466, true }, - { 111478, true }, + { 111480, true }, { 111492, true }, - { 111510, true }, + { 111503, true }, + { 111514, true }, { 111524, true }, - { 111535, true }, - { 111552, true }, - { 111563, true }, - { 111583, true }, - { 111594, true }, - { 111608, true }, - { 111622, true }, - { 111635, true }, - { 111646, true }, - { 111665, true }, - { 111681, true }, - { 111694, true }, - { 111702, true }, - { 111716, true }, - { 111729, true }, - { 111741, true }, - { 111754, true }, - { 111766, true }, - { 111778, true }, - { 111793, true }, - { 111803, true }, - { 111818, true }, - { 111832, true }, - { 111845, true }, - { 111855, true }, - { 111877, true }, - { 111891, true }, - { 111904, true }, - { 111914, true }, - { 111924, true }, - { 111938, true }, - { 111949, true }, - { 111959, true }, + { 111535, false }, + { 111556, true }, + { 111567, true }, + { 111581, true }, + { 111593, true }, + { 111607, true }, + { 111625, true }, + { 111639, true }, + { 111650, true }, + { 111667, true }, + { 111678, true }, + { 111698, true }, + { 111709, true }, + { 111723, true }, + { 111737, true }, + { 111750, true }, + { 111761, true }, + { 111780, true }, + { 111796, true }, + { 111809, true }, + { 111817, true }, + { 111831, true }, + { 111844, true }, + { 111856, true }, + { 111869, true }, + { 111881, true }, + { 111893, true }, + { 111908, true }, + { 111918, true }, + { 111933, true }, + { 111947, true }, + { 111960, true }, { 111970, true }, - { 111981, true }, - { 111994, true }, + { 111992, true }, { 112006, true }, - { 112016, true }, - { 112028, true }, - { 112038, true }, - { 112046, true }, - { 112068, true }, - { 112080, true }, - { 112089, true }, - { 112105, true }, - { 112114, true }, - { 112126, true }, - { 112138, true }, - { 112148, true }, - { 112158, true }, - { 112169, true }, - { 112182, false }, - { 112193, true }, - { 112206, false }, - { 112231, true }, - { 112243, true }, - { 112252, true }, - { 112261, true }, - { 112278, true }, - { 112296, true }, - { 112304, true }, - { 112323, true }, - { 112336, true }, - { 112350, true }, - { 112360, true }, - { 112372, true }, - { 112396, true }, - { 112410, true }, - { 112428, true }, - { 112446, true }, - { 112460, true }, - { 112478, true }, - { 112494, true }, - { 112513, true }, - { 112523, true }, - { 112546, true }, - { 112560, false }, - { 112573, true }, - { 112583, true }, - { 112596, true }, - { 112605, true }, - { 112616, true }, - { 112628, false }, - { 112641, true }, - { 112651, true }, - { 112659, true }, - { 112671, true }, - { 112683, true }, - { 112691, true }, - { 112703, true }, - { 112712, true }, - { 112718, true }, - { 112730, true }, - { 112740, true }, - { 112749, true }, - { 112759, true }, - { 112766, false }, - { 112781, true }, - { 112799, true }, - { 112814, true }, - { 112827, true }, - { 112841, true }, + { 112019, true }, + { 112029, true }, + { 112039, true }, + { 112053, true }, + { 112064, true }, + { 112074, true }, + { 112085, true }, + { 112096, true }, + { 112109, true }, + { 112121, true }, + { 112131, true }, + { 112143, true }, + { 112153, true }, + { 112161, true }, + { 112183, true }, + { 112195, true }, + { 112204, true }, + { 112220, true }, + { 112229, true }, + { 112241, true }, + { 112253, true }, + { 112263, true }, + { 112273, true }, + { 112284, true }, + { 112297, false }, + { 112308, true }, + { 112321, false }, + { 112346, true }, + { 112358, true }, + { 112367, true }, + { 112376, true }, + { 112393, true }, + { 112411, true }, + { 112419, true }, + { 112438, true }, + { 112451, true }, + { 112465, true }, + { 112475, true }, + { 112487, true }, + { 112511, true }, + { 112525, true }, + { 112543, true }, + { 112561, true }, + { 112575, true }, + { 112593, true }, + { 112609, true }, + { 112628, true }, + { 112638, true }, + { 112661, true }, + { 112675, false }, + { 112688, true }, + { 112699, true }, + { 112709, true }, + { 112722, true }, + { 112731, true }, + { 112742, true }, + { 112754, false }, + { 112767, true }, + { 112777, true }, + { 112785, true }, + { 112797, true }, + { 112809, true }, + { 112817, true }, + { 112829, true }, + { 112844, true }, { 112853, true }, - { 112867, true }, - { 112880, true }, - { 112891, true }, + { 112859, true }, + { 112871, true }, + { 112881, true }, + { 112890, true }, { 112900, true }, - { 112915, true }, - { 112934, true }, - { 112944, true }, - { 112957, true }, - { 112965, true }, - { 112978, true }, - { 112990, true }, - { 113003, true }, - { 113023, true }, - { 113042, true }, - { 113059, true }, - { 113071, true }, - { 113086, true }, - { 113099, true }, - { 113111, true }, - { 113130, true }, - { 113138, true }, - { 113157, true }, - { 113175, true }, - { 113197, true }, - { 113213, true }, - { 113224, true }, - { 113239, true }, - { 113249, true }, - { 113263, true }, - { 113278, false }, - { 113289, true }, - { 113308, true }, - { 113317, false }, - { 113328, true }, - { 113336, true }, - { 113344, true }, - { 113360, true }, - { 113369, true }, - { 113377, true }, - { 113388, true }, - { 113400, true }, - { 113414, true }, - { 113428, true }, - { 113439, true }, - { 113448, true }, - { 113464, true }, - { 113486, true }, - { 113498, true }, - { 113516, true }, - { 113523, true }, - { 113535, true }, - { 113545, true }, - { 113561, true }, - { 113573, true }, - { 113591, true }, - { 113609, true }, - { 113629, true }, + { 112907, false }, + { 112922, true }, + { 112940, true }, + { 112955, true }, + { 112968, true }, + { 112982, true }, + { 112994, true }, + { 113008, true }, + { 113021, true }, + { 113032, true }, + { 113041, true }, + { 113056, true }, + { 113075, true }, + { 113085, true }, + { 113098, true }, + { 113106, true }, + { 113119, true }, + { 113131, true }, + { 113144, true }, + { 113164, true }, + { 113183, true }, + { 113200, true }, + { 113212, true }, + { 113227, true }, + { 113240, true }, + { 113252, true }, + { 113271, true }, + { 113279, true }, + { 113298, true }, + { 113316, true }, + { 113338, true }, + { 113354, true }, + { 113365, true }, + { 113380, true }, + { 113390, true }, + { 113404, true }, + { 113419, false }, + { 113430, true }, + { 113449, true }, + { 113458, false }, + { 113469, true }, + { 113477, true }, + { 113485, true }, + { 113501, true }, + { 113510, true }, + { 113518, true }, + { 113529, true }, + { 113541, true }, + { 113555, true }, + { 113569, true }, + { 113580, true }, + { 113589, true }, + { 113605, true }, + { 113627, true }, { 113639, true }, - { 113662, true }, - { 113717, true }, - { 113729, true }, - { 113744, true }, - { 113754, true }, - { 113772, true }, - { 113787, true }, - { 113800, false }, - { 113814, true }, - { 113828, false }, - { 113844, true }, - { 113869, true }, - { 113879, true }, - { 113890, true }, - { 113902, true }, - { 113924, true }, - { 113947, true }, - { 113957, true }, - { 113967, true }, - { 113990, true }, - { 114003, false }, - { 114017, true }, - { 114035, true }, - { 114046, true }, - { 114057, true }, - { 114076, true }, - { 114092, true }, - { 114105, true }, - { 114130, true }, - { 114144, true }, - { 114157, true }, - { 114186, true }, - { 114199, true }, - { 114209, true }, - { 114221, true }, + { 113657, true }, + { 113664, true }, + { 113676, true }, + { 113686, true }, + { 113702, true }, + { 113714, true }, + { 113732, true }, + { 113750, true }, + { 113770, true }, + { 113780, true }, + { 113803, true }, + { 113858, true }, + { 113870, true }, + { 113885, true }, + { 113895, true }, + { 113913, true }, + { 113928, true }, + { 113941, false }, + { 113955, true }, + { 113969, false }, + { 113985, true }, + { 114010, true }, + { 114020, true }, + { 114031, true }, + { 114043, true }, + { 114065, true }, + { 114088, true }, + { 114098, true }, + { 114108, true }, + { 114131, true }, + { 114144, false }, + { 114158, true }, + { 114176, true }, + { 114187, true }, + { 114198, true }, + { 114217, true }, { 114233, true }, - { 114252, true }, - { 114262, true }, - { 114276, true }, - { 114293, true }, - { 114310, true }, - { 114322, true }, - { 114336, true }, + { 114246, true }, + { 114271, true }, + { 114285, true }, + { 114298, true }, + { 114327, true }, + { 114340, true }, { 114350, true }, - { 114360, true }, - { 114377, true }, - { 114389, true }, - { 114400, true }, - { 114416, true }, - { 114431, true }, - { 114443, false }, - { 114452, true }, - { 114472, true }, - { 114492, true }, - { 114508, true }, - { 114522, true }, - { 114535, true }, - { 114550, true }, - { 114562, true }, + { 114362, true }, + { 114374, true }, + { 114393, true }, + { 114403, true }, + { 114417, true }, + { 114434, true }, + { 114451, true }, + { 114463, true }, + { 114477, true }, + { 114491, true }, + { 114501, true }, + { 114518, true }, + { 114530, true }, + { 114541, true }, + { 114557, true }, { 114572, true }, + { 114584, false }, { 114593, true }, - { 114607, true }, - { 114621, true }, - { 114639, true }, - { 114654, true }, - { 114666, true }, - { 114684, true }, - { 114695, true }, - { 114708, true }, - { 114720, true }, + { 114613, true }, + { 114633, true }, + { 114649, true }, + { 114663, true }, + { 114676, true }, + { 114691, true }, + { 114703, true }, + { 114713, true }, { 114734, true }, - { 114746, true }, - { 114765, true }, - { 114777, true }, - { 114789, true }, - { 114810, true }, - { 114826, true }, - { 114839, true }, - { 114856, true }, - { 114871, true }, - { 114885, true }, - { 114898, true }, - { 114911, true }, - { 114925, true }, - { 114940, true }, - { 114952, true }, - { 114965, true }, - { 114984, true }, - { 115007, false }, - { 115020, true }, - { 115028, true }, - { 115048, false }, + { 114748, true }, + { 114762, true }, + { 114780, true }, + { 114795, true }, + { 114807, true }, + { 114825, true }, + { 114836, true }, + { 114849, true }, + { 114861, true }, + { 114875, true }, + { 114887, true }, + { 114906, true }, + { 114918, true }, + { 114930, true }, + { 114951, true }, + { 114967, true }, + { 114980, true }, + { 114997, true }, + { 115012, true }, + { 115026, true }, + { 115039, true }, + { 115052, true }, { 115066, true }, - { 115086, true }, - { 115099, true }, - { 115114, true }, - { 115129, true }, - { 115144, true }, - { 115158, true }, - { 115173, true }, - { 115198, true }, - { 115209, true }, - { 115225, true }, - { 115239, true }, - { 115252, true }, - { 115280, true }, - { 115307, true }, - { 115332, true }, - { 115360, true }, - { 115374, true }, - { 115388, true }, - { 115402, true }, - { 115418, true }, - { 115431, true }, - { 115442, true }, - { 115453, true }, - { 115464, true }, - { 115476, true }, - { 115504, true }, - { 115514, true }, - { 115524, true }, - { 115541, true }, - { 115558, true }, - { 115568, true }, - { 115591, true }, - { 115601, true }, - { 115623, true }, - { 115635, true }, - { 115646, true }, - { 115658, true }, - { 115670, true }, - { 115681, true }, + { 115081, true }, + { 115093, true }, + { 115106, true }, + { 115125, true }, + { 115148, false }, + { 115161, true }, + { 115169, true }, + { 115189, false }, + { 115207, true }, + { 115227, true }, + { 115240, true }, + { 115255, true }, + { 115270, true }, + { 115285, true }, + { 115299, true }, + { 115314, true }, + { 115339, true }, + { 115350, true }, + { 115366, true }, + { 115380, true }, + { 115393, true }, + { 115421, true }, + { 115448, true }, + { 115473, true }, + { 115501, true }, + { 115515, true }, + { 115529, true }, + { 115543, true }, + { 115559, true }, + { 115572, true }, + { 115583, true }, + { 115594, true }, + { 115605, true }, + { 115617, true }, + { 115645, true }, + { 115655, true }, + { 115665, true }, + { 115682, true }, { 115699, true }, - { 115714, true }, - { 115724, true }, - { 115733, true }, - { 115751, false }, - { 115762, true }, - { 115773, false }, - { 115783, true }, - { 115791, true }, - { 115805, true }, - { 115817, true }, - { 115829, true }, - { 115847, true }, - { 115867, true }, - { 115882, true }, - { 115899, true }, - { 115915, true }, - { 115928, true }, - { 115939, true }, - { 115954, true }, - { 115975, true }, - { 115990, true }, - { 116006, true }, - { 116019, true }, - { 116044, true }, - { 116060, true }, + { 115709, true }, + { 115732, true }, + { 115742, true }, + { 115764, true }, + { 115776, true }, + { 115787, true }, + { 115799, true }, + { 115811, true }, + { 115822, true }, + { 115840, true }, + { 115855, true }, + { 115865, true }, + { 115874, true }, + { 115892, false }, + { 115903, true }, + { 115914, false }, + { 115924, true }, + { 115932, true }, + { 115946, true }, + { 115958, true }, + { 115970, true }, + { 115988, true }, + { 116008, true }, + { 116023, true }, + { 116040, true }, + { 116056, true }, + { 116069, true }, { 116080, true }, { 116095, true }, - { 116106, true }, - { 116117, true }, + { 116116, true }, { 116131, true }, - { 116143, true }, + { 116147, true }, { 116160, true }, - { 116171, true }, - { 116179, true }, - { 116191, true }, - { 116203, true }, - { 116217, true }, - { 116231, true }, - { 116248, true }, - { 116264, true }, - { 116280, true }, - { 116296, true }, - { 116315, true }, - { 116330, true }, - { 116342, true }, - { 116359, false }, - { 116379, true }, - { 116395, true }, - { 116406, true }, - { 116426, true }, - { 116447, true }, - { 116468, true }, - { 116487, true }, - { 116502, true }, - { 116513, true }, - { 116530, true }, - { 116538, true }, - { 116565, true }, - { 116576, true }, - { 116593, true }, - { 116603, true }, - { 116618, true }, - { 116630, true }, - { 116651, true }, - { 116660, true }, - { 116673, true }, - { 116686, true }, - { 116704, true }, - { 116713, true }, - { 116722, true }, - { 116731, false }, - { 116748, false }, + { 116185, true }, + { 116201, true }, + { 116221, true }, + { 116236, true }, + { 116247, true }, + { 116258, true }, + { 116272, true }, + { 116284, true }, + { 116301, true }, + { 116312, true }, + { 116320, true }, + { 116332, true }, + { 116344, true }, + { 116358, true }, + { 116372, true }, + { 116389, true }, + { 116405, true }, + { 116421, true }, + { 116437, true }, + { 116456, true }, + { 116471, true }, + { 116483, true }, + { 116500, false }, + { 116520, true }, + { 116536, true }, + { 116547, true }, + { 116567, true }, + { 116588, true }, + { 116609, true }, + { 116628, true }, + { 116643, true }, + { 116654, true }, + { 116671, true }, + { 116679, true }, + { 116706, true }, + { 116717, true }, + { 116734, true }, + { 116744, true }, { 116759, true }, - { 116777, true }, - { 116788, true }, - { 116803, true }, - { 116818, true }, - { 116834, true }, - { 116856, true }, - { 116871, true }, - { 116879, true }, - { 116892, true }, - { 116904, true }, - { 116921, true }, - { 116935, true }, - { 116945, true }, - { 116963, true }, - { 116980, true }, + { 116771, true }, + { 116792, true }, + { 116801, true }, + { 116814, true }, + { 116827, true }, + { 116845, true }, + { 116854, true }, + { 116863, true }, + { 116872, false }, + { 116889, false }, + { 116900, true }, + { 116918, true }, + { 116929, true }, + { 116944, true }, + { 116959, true }, + { 116975, true }, { 116997, true }, - { 117005, true }, - { 117029, true }, - { 117047, true }, - { 117061, true }, - { 117079, true }, - { 117092, true }, - { 117106, true }, - { 117120, true }, - { 117139, true }, - { 117149, true }, - { 117171, true }, - { 117183, true }, - { 117194, true }, - { 117221, true }, + { 117012, true }, + { 117020, true }, + { 117033, true }, + { 117045, true }, + { 117062, true }, + { 117076, true }, + { 117086, true }, + { 117104, true }, + { 117121, true }, + { 117138, true }, + { 117146, true }, + { 117170, true }, + { 117188, true }, + { 117202, true }, + { 117220, true }, { 117233, true }, - { 117245, true }, - { 117266, true }, - { 117279, true }, - { 117286, true }, - { 117306, true }, - { 117316, true }, - { 117332, true }, - { 117342, false }, - { 117359, true }, - { 117370, true }, - { 117377, true }, + { 117247, true }, + { 117261, true }, + { 117280, true }, + { 117290, true }, + { 117312, true }, + { 117324, true }, + { 117335, true }, + { 117362, true }, + { 117374, true }, { 117386, true }, - { 117405, true }, - { 117418, true }, - { 117428, true }, - { 117448, true }, - { 117458, true }, - { 117468, true }, - { 117476, true }, - { 117489, true }, - { 117506, true }, - { 117518, false }, - { 117533, true }, - { 117545, true }, - { 117560, true }, - { 117570, true }, - { 117588, true }, + { 117407, true }, + { 117420, true }, + { 117427, true }, + { 117447, true }, + { 117457, true }, + { 117473, true }, + { 117483, false }, + { 117500, true }, + { 117511, true }, + { 117518, true }, + { 117527, true }, + { 117546, true }, + { 117559, true }, + { 117569, true }, + { 117589, true }, { 117599, true }, - { 117611, true }, - { 117632, false }, - { 117658, true }, - { 117672, true }, + { 117609, true }, + { 117617, true }, + { 117630, true }, + { 117647, true }, + { 117659, false }, + { 117674, true }, { 117686, true }, - { 117700, true }, - { 117713, true }, - { 117727, true }, - { 117738, true }, + { 117701, true }, + { 117711, true }, + { 117729, true }, + { 117740, true }, { 117752, true }, - { 117765, true }, - { 117777, true }, - { 117790, true }, - { 117807, false }, - { 117821, true }, - { 117834, true }, - { 117847, true }, - { 117860, true }, - { 117880, true }, - { 117890, true }, - { 117901, true }, - { 117912, true }, - { 117923, true }, - { 117935, true }, - { 117948, true }, - { 117972, true }, - { 117984, true }, - { 117992, true }, - { 118004, true }, - { 118018, true }, - { 118033, true }, - { 118056, true }, - { 118067, true }, - { 118081, true }, - { 118094, false }, - { 118109, true }, - { 118121, true }, - { 118137, true }, - { 118149, true }, - { 118163, true }, - { 118173, true }, + { 117773, false }, + { 117799, true }, + { 117813, true }, + { 117827, true }, + { 117841, true }, + { 117854, true }, + { 117868, false }, + { 117881, true }, + { 117892, true }, + { 117906, true }, + { 117919, true }, + { 117931, true }, + { 117944, true }, + { 117961, false }, + { 117975, true }, + { 117988, true }, + { 118001, true }, + { 118014, true }, + { 118034, true }, + { 118044, true }, + { 118055, true }, + { 118066, true }, + { 118077, true }, + { 118089, true }, + { 118102, true }, + { 118126, true }, + { 118138, true }, + { 118146, true }, + { 118158, true }, + { 118172, true }, { 118187, true }, - { 118200, true }, - { 118213, true }, - { 118223, true }, - { 118251, true }, - { 118279, true }, - { 118289, true }, - { 118301, true }, - { 118311, true }, - { 118321, true }, - { 118334, true }, - { 118347, true }, - { 118363, false }, - { 118378, true }, - { 118396, true }, - { 118415, true }, - { 118423, true }, - { 118436, true }, - { 118451, true }, + { 118210, true }, + { 118221, true }, + { 118235, true }, + { 118248, false }, + { 118263, true }, + { 118275, true }, + { 118291, true }, + { 118303, true }, + { 118317, true }, + { 118327, true }, + { 118341, true }, + { 118354, true }, + { 118367, true }, + { 118377, true }, + { 118405, true }, + { 118433, true }, + { 118443, true }, + { 118455, true }, { 118465, true }, - { 118481, true }, - { 118495, true }, - { 118513, true }, - { 118523, true }, - { 118532, false }, - { 118543, true }, - { 118559, true }, - { 118570, true }, - { 118580, true }, - { 118592, true }, - { 118602, true }, - { 118629, true }, - { 118647, true }, - { 118661, true }, - { 118672, true }, - { 118681, true }, - { 118690, true }, - { 118707, false }, - { 118721, true }, - { 118744, true }, - { 118760, true }, - { 118781, true }, - { 118797, true }, - { 118810, true }, - { 118832, true }, - { 118842, true }, - { 118850, true }, - { 118859, true }, - { 118870, true }, - { 118885, true }, - { 118899, true }, - { 118909, true }, - { 118926, true }, - { 118941, true }, - { 118955, true }, - { 118965, true }, - { 118985, true }, - { 118995, true }, - { 119009, true }, - { 119021, true }, - { 119040, true }, + { 118475, true }, + { 118488, true }, + { 118501, true }, + { 118517, false }, + { 118532, true }, + { 118550, true }, + { 118569, true }, + { 118577, true }, + { 118590, true }, + { 118605, true }, + { 118619, true }, + { 118635, true }, + { 118649, true }, + { 118667, true }, + { 118677, true }, + { 118686, false }, + { 118697, true }, + { 118713, true }, + { 118724, true }, + { 118734, true }, + { 118746, true }, + { 118756, true }, + { 118783, true }, + { 118801, true }, + { 118815, true }, + { 118826, true }, + { 118835, true }, + { 118844, true }, + { 118861, false }, + { 118875, true }, + { 118898, true }, + { 118914, true }, + { 118935, true }, + { 118951, true }, + { 118964, true }, + { 118986, true }, + { 118996, true }, + { 119004, true }, + { 119013, true }, + { 119024, true }, + { 119039, true }, { 119053, true }, - { 119077, false }, - { 119096, true }, - { 119124, true }, - { 119138, true }, - { 119152, true }, - { 119164, true }, - { 119178, true }, - { 119188, true }, - { 119210, true }, - { 119229, true }, - { 119247, true }, - { 119255, true }, - { 119271, true }, - { 119286, true }, - { 119294, true }, - { 119305, true }, + { 119063, true }, + { 119080, true }, + { 119095, true }, + { 119109, true }, + { 119119, true }, + { 119139, true }, + { 119149, true }, + { 119163, true }, + { 119175, true }, + { 119194, true }, + { 119207, true }, + { 119231, false }, + { 119250, true }, + { 119278, true }, + { 119292, true }, + { 119306, true }, { 119318, true }, - { 119334, true }, - { 119348, true }, + { 119332, true }, + { 119342, true }, { 119364, true }, - { 119378, true }, - { 119393, true }, - { 119408, true }, - { 119420, true }, - { 119432, true }, - { 119451, true }, - { 119467, false }, - { 119492, true }, - { 119511, true }, - { 119528, true }, - { 119538, true }, - { 119549, true }, - { 119561, false }, - { 119576, true }, - { 119594, true }, - { 119603, true }, - { 119610, true }, - { 119621, true }, - { 119635, true }, - { 119648, true }, - { 119661, true }, - { 119674, true }, - { 119685, true }, - { 119698, true }, - { 119708, true }, - { 119718, true }, + { 119383, true }, + { 119401, true }, + { 119409, true }, + { 119425, true }, + { 119440, true }, + { 119448, true }, + { 119459, true }, + { 119472, true }, + { 119488, true }, + { 119502, true }, + { 119518, true }, + { 119532, true }, + { 119547, true }, + { 119562, true }, + { 119574, true }, + { 119586, true }, + { 119605, true }, + { 119621, false }, + { 119646, true }, + { 119665, true }, + { 119682, true }, + { 119692, true }, + { 119703, true }, + { 119715, false }, { 119730, true }, - { 119738, true }, - { 119747, true }, - { 119754, true }, + { 119748, true }, + { 119757, true }, { 119764, true }, { 119775, true }, - { 119793, true }, - { 119811, true }, - { 119825, true }, + { 119789, true }, + { 119802, true }, + { 119815, true }, + { 119828, true }, { 119839, true }, + { 119852, true }, { 119862, true }, { 119872, true }, - { 119887, true }, - { 119905, true }, - { 119922, true }, - { 119936, true }, - { 119950, true }, + { 119884, true }, + { 119892, true }, + { 119901, true }, + { 119908, true }, + { 119918, true }, + { 119929, true }, + { 119947, true }, { 119965, true }, - { 119981, true }, - { 119994, true }, - { 120008, true }, - { 120020, true }, - { 120032, true }, - { 120044, true }, - { 120057, true }, - { 120070, false }, - { 120081, true }, - { 120095, true }, - { 120106, true }, + { 119979, true }, + { 119993, true }, + { 120016, true }, + { 120026, true }, + { 120041, true }, + { 120059, true }, + { 120076, true }, + { 120090, true }, + { 120104, true }, { 120119, true }, - { 120134, true }, - { 120141, true }, - { 120160, true }, - { 120179, true }, - { 120194, true }, - { 120218, false }, - { 120233, true }, - { 120244, true }, - { 120267, false }, - { 120278, false }, - { 120289, false }, - { 120301, true }, - { 120315, true }, - { 120328, true }, - { 120341, true }, - { 120354, true }, - { 120376, true }, - { 120386, true }, - { 120406, true }, - { 120424, true }, - { 120438, true }, - { 120455, false }, - { 120470, false }, - { 120486, true }, - { 120503, true }, - { 120514, true }, - { 120536, true }, - { 120550, true }, - { 120570, true }, - { 120580, true }, - { 120591, true }, - { 120599, true }, - { 120608, true }, - { 120619, true }, - { 120631, true }, - { 120641, true }, - { 120656, true }, - { 120669, true }, - { 120683, true }, - { 120691, true }, - { 120708, true }, - { 120729, true }, - { 120743, true }, - { 120758, true }, - { 120772, true }, - { 120792, true }, - { 120807, true }, - { 120818, true }, - { 120830, true }, - { 120849, true }, + { 120135, true }, + { 120148, true }, + { 120162, true }, + { 120174, true }, + { 120186, true }, + { 120198, true }, + { 120211, true }, + { 120224, false }, + { 120235, true }, + { 120249, true }, + { 120260, true }, + { 120273, true }, + { 120288, true }, + { 120295, true }, + { 120314, true }, + { 120333, true }, + { 120348, true }, + { 120372, false }, + { 120387, true }, + { 120398, true }, + { 120421, false }, + { 120432, false }, + { 120443, false }, + { 120455, true }, + { 120469, true }, + { 120482, true }, + { 120495, true }, + { 120508, true }, + { 120530, true }, + { 120540, true }, + { 120560, true }, + { 120578, true }, + { 120592, true }, + { 120609, false }, + { 120624, false }, + { 120640, true }, + { 120657, true }, + { 120668, true }, + { 120690, true }, + { 120704, true }, + { 120724, true }, + { 120734, true }, + { 120745, true }, + { 120753, true }, + { 120762, true }, + { 120773, true }, + { 120785, true }, + { 120795, true }, + { 120810, true }, + { 120823, true }, + { 120837, true }, + { 120845, true }, { 120862, true }, - { 120874, true }, - { 120885, false }, - { 120901, true }, - { 120914, true }, - { 120928, true }, - { 120941, true }, - { 120951, true }, - { 120971, true }, - { 120994, true }, - { 121014, true }, - { 121025, true }, - { 121035, true }, - { 121045, true }, - { 121060, true }, - { 121070, true }, - { 121087, true }, - { 121103, true }, - { 121118, true }, - { 121138, true }, + { 120883, true }, + { 120897, true }, + { 120912, true }, + { 120926, true }, + { 120946, true }, + { 120961, true }, + { 120972, true }, + { 120984, true }, + { 121003, true }, + { 121016, true }, + { 121028, true }, + { 121039, false }, + { 121055, true }, + { 121068, true }, + { 121082, true }, + { 121095, true }, + { 121105, true }, + { 121125, true }, { 121148, true }, - { 121162, true }, - { 121187, true }, - { 121201, true }, - { 121215, true }, - { 121229, true }, - { 121243, true }, + { 121168, true }, + { 121179, true }, + { 121189, true }, + { 121199, true }, + { 121214, true }, + { 121224, true }, + { 121241, true }, { 121257, true }, { 121272, true }, - { 121286, true }, - { 121300, true }, - { 121314, true }, - { 121334, true }, - { 121351, true }, - { 121366, true }, - { 121377, true }, - { 121390, true }, - { 121408, true }, - { 121423, true }, - { 121439, true }, - { 121451, true }, + { 121292, true }, + { 121302, true }, + { 121316, true }, + { 121341, true }, + { 121355, true }, + { 121369, true }, + { 121383, true }, + { 121397, true }, + { 121411, true }, + { 121426, true }, + { 121440, true }, + { 121454, true }, { 121468, true }, - { 121481, true }, - { 121496, true }, - { 121505, false }, + { 121488, true }, + { 121505, true }, { 121520, true }, { 121531, true }, - { 121546, true }, - { 121558, true }, - { 121575, true }, - { 121584, true }, - { 121596, true }, - { 121613, false }, - { 121623, true }, - { 121642, true }, - { 121652, true }, - { 121668, true }, - { 121688, true }, - { 121702, true }, - { 121716, true }, - { 121735, true }, - { 121755, true }, - { 121767, true }, - { 121783, true }, - { 121793, true }, - { 121808, true }, - { 121818, true }, - { 121832, true }, + { 121544, true }, + { 121562, true }, + { 121577, true }, + { 121593, true }, + { 121605, true }, + { 121622, true }, + { 121635, true }, + { 121650, true }, + { 121659, false }, + { 121674, true }, + { 121685, true }, + { 121700, true }, + { 121712, true }, + { 121729, true }, + { 121738, true }, + { 121750, true }, + { 121767, false }, + { 121777, true }, + { 121796, true }, + { 121806, true }, + { 121822, true }, { 121842, true }, - { 121861, true }, - { 121878, true }, - { 121887, true }, - { 121900, true }, - { 121915, true }, - { 121929, true }, - { 121948, true }, - { 121966, true }, - { 121980, true }, - { 121995, true }, - { 122011, true }, - { 122027, true }, - { 122035, true }, - { 122055, true }, - { 122067, true }, - { 122079, true }, - { 122091, true }, - { 122104, true }, - { 122117, true }, - { 122131, true }, - { 122146, true }, - { 122160, true }, - { 122174, false }, - { 122200, true }, + { 121856, true }, + { 121870, true }, + { 121889, true }, + { 121909, true }, + { 121921, true }, + { 121937, true }, + { 121947, true }, + { 121962, true }, + { 121972, true }, + { 121986, true }, + { 121996, true }, + { 122015, true }, + { 122032, true }, + { 122041, true }, + { 122054, true }, + { 122069, true }, + { 122083, true }, + { 122102, true }, + { 122120, true }, + { 122134, true }, + { 122149, true }, + { 122165, true }, + { 122181, true }, + { 122189, true }, { 122209, true }, - { 122217, true }, - { 122225, true }, + { 122221, true }, { 122233, true }, - { 122243, true }, - { 122252, true }, - { 122264, true }, - { 122283, true }, - { 122293, true }, - { 122304, true }, - { 122321, true }, - { 122334, true }, - { 122344, true }, - { 122358, true }, - { 122369, true }, + { 122245, true }, + { 122258, true }, + { 122271, true }, + { 122285, true }, + { 122300, true }, + { 122314, true }, + { 122328, false }, + { 122354, true }, + { 122363, true }, + { 122371, true }, + { 122379, true }, { 122387, true }, - { 122405, true }, - { 122419, true }, - { 122429, true }, - { 122443, true }, - { 122450, true }, - { 122460, true }, + { 122397, true }, + { 122406, true }, + { 122418, true }, + { 122437, true }, + { 122447, true }, + { 122458, true }, { 122475, true }, - { 122497, true }, - { 122505, true }, - { 122515, true }, - { 122534, true }, - { 122546, true }, - { 122556, true }, - { 122566, true }, - { 122576, true }, - { 122587, true }, - { 122600, true }, - { 122608, true }, - { 122622, true }, - { 122632, true }, - { 122643, true }, - { 122650, true }, - { 122658, true }, - { 122676, true }, - { 122687, true }, - { 122703, false }, - { 122718, true }, - { 122728, true }, - { 122737, true }, - { 122745, true }, + { 122488, true }, + { 122498, true }, + { 122512, true }, + { 122523, true }, + { 122541, true }, + { 122559, true }, + { 122573, true }, + { 122583, true }, + { 122597, true }, + { 122604, true }, + { 122614, true }, + { 122629, true }, + { 122651, true }, + { 122659, true }, + { 122669, true }, + { 122688, true }, + { 122700, true }, + { 122710, true }, + { 122720, true }, + { 122730, true }, + { 122741, true }, { 122754, true }, - { 122763, true }, - { 122783, true }, - { 122792, false }, - { 122803, true }, - { 122815, true }, - { 122831, true }, - { 122844, true }, - { 122857, true }, - { 122869, true }, - { 122884, true }, - { 122894, true }, - { 122906, true }, - { 122918, true }, - { 122929, true }, - { 122940, true }, - { 122952, true }, - { 122975, true }, - { 122985, true }, - { 122995, true }, - { 123011, true }, - { 123026, true }, - { 123039, true }, - { 123048, true }, - { 123063, true }, - { 123076, true }, - { 123089, true }, - { 123104, true }, - { 123114, true }, - { 123131, true }, - { 123147, true }, - { 123161, true }, - { 123175, true }, - { 123186, true }, - { 123196, true }, - { 123210, true }, + { 122762, true }, + { 122776, true }, + { 122786, true }, + { 122797, true }, + { 122804, true }, + { 122812, true }, + { 122830, true }, + { 122841, true }, + { 122857, false }, + { 122872, true }, + { 122882, true }, + { 122891, true }, + { 122899, true }, + { 122908, true }, + { 122917, true }, + { 122937, true }, + { 122946, false }, + { 122957, true }, + { 122969, false }, + { 122983, true }, + { 122999, true }, + { 123012, true }, + { 123025, true }, + { 123037, true }, + { 123052, true }, + { 123062, true }, + { 123074, true }, + { 123086, true }, + { 123097, true }, + { 123108, true }, + { 123120, true }, + { 123130, true }, + { 123140, true }, + { 123156, true }, + { 123171, true }, + { 123184, true }, + { 123193, true }, + { 123208, true }, { 123221, true }, { 123234, true }, - { 123247, true }, - { 123264, true }, + { 123249, true }, + { 123259, true }, { 123276, true }, - { 123293, true }, - { 123311, true }, - { 123322, true }, - { 123335, true }, - { 123356, true }, - { 123367, true }, - { 123391, true }, - { 123406, true }, - { 123431, true }, - { 123439, true }, - { 123455, false }, - { 123470, true }, - { 123482, true }, - { 123494, true }, - { 123508, true }, - { 123522, true }, + { 123292, true }, + { 123306, true }, + { 123320, true }, + { 123331, true }, + { 123341, true }, + { 123355, true }, + { 123366, true }, + { 123379, true }, + { 123392, true }, + { 123409, true }, + { 123421, true }, + { 123438, true }, + { 123456, true }, + { 123467, true }, + { 123480, true }, + { 123501, true }, + { 123512, true }, { 123536, true }, - { 123550, true }, - { 123567, true }, - { 123594, true }, - { 123611, true }, - { 123631, true }, - { 123643, true }, + { 123551, true }, + { 123576, true }, + { 123584, true }, + { 123600, false }, + { 123615, true }, + { 123627, true }, + { 123639, true }, { 123653, true }, { 123667, true }, - { 123689, true }, - { 123703, true }, - { 123721, true }, - { 123742, true }, - { 123759, true }, - { 123770, true }, - { 123784, true }, - { 123797, true }, - { 123813, true }, - { 123825, true }, - { 123839, true }, - { 123855, true }, - { 123872, true }, - { 123886, true }, - { 123898, false }, - { 123923, true }, - { 123947, true }, - { 123957, false }, - { 123983, true }, + { 123681, true }, + { 123695, true }, + { 123712, true }, + { 123739, true }, + { 123756, true }, + { 123776, true }, + { 123788, true }, + { 123798, true }, + { 123812, true }, + { 123834, true }, + { 123848, true }, + { 123866, true }, + { 123887, true }, + { 123904, true }, + { 123915, true }, + { 123929, true }, + { 123942, true }, + { 123958, true }, + { 123970, true }, + { 123984, true }, { 124000, true }, { 124017, true }, { 124031, true }, - { 124061, false }, - { 124075, true }, + { 124043, false }, + { 124068, true }, { 124092, true }, - { 124106, true }, - { 124129, true }, - { 124147, true }, - { 124155, true }, - { 124163, true }, - { 124171, true }, - { 124179, true }, - { 124187, true }, - { 124198, true }, - { 124208, true }, - { 124222, true }, - { 124241, true }, - { 124257, true }, - { 124268, true }, - { 124293, true }, - { 124305, true }, - { 124314, false }, - { 124330, true }, - { 124340, false }, - { 124362, true }, - { 124377, true }, - { 124391, true }, - { 124404, true }, - { 124421, true }, - { 124437, true }, - { 124460, true }, - { 124482, true }, - { 124500, true }, - { 124519, false }, - { 124538, true }, - { 124551, true }, - { 124564, true }, - { 124588, true }, - { 124599, true }, - { 124618, true }, - { 124646, true }, - { 124659, true }, - { 124679, true }, - { 124699, true }, - { 124713, true }, - { 124726, true }, - { 124747, false }, - { 124758, true }, - { 124777, true }, - { 124788, false }, - { 124806, true }, - { 124818, true }, - { 124829, true }, - { 124859, true }, - { 124870, true }, - { 124884, true }, - { 124898, true }, - { 124910, true }, - { 124924, true }, - { 124944, true }, - { 124959, true }, - { 124970, true }, - { 124994, true }, + { 124102, false }, + { 124128, true }, + { 124145, true }, + { 124162, true }, + { 124176, true }, + { 124206, false }, + { 124220, true }, + { 124237, true }, + { 124251, true }, + { 124274, true }, + { 124292, true }, + { 124300, true }, + { 124308, true }, + { 124316, true }, + { 124324, true }, + { 124332, true }, + { 124343, true }, + { 124353, true }, + { 124367, true }, + { 124386, true }, + { 124402, true }, + { 124413, true }, + { 124438, true }, + { 124450, true }, + { 124459, false }, + { 124475, true }, + { 124485, false }, + { 124507, true }, + { 124522, true }, + { 124536, true }, + { 124549, true }, + { 124566, true }, + { 124582, true }, + { 124605, true }, + { 124627, true }, + { 124645, true }, + { 124664, false }, + { 124683, true }, + { 124696, true }, + { 124709, true }, + { 124733, true }, + { 124744, true }, + { 124763, true }, + { 124791, true }, + { 124804, true }, + { 124824, true }, + { 124844, true }, + { 124858, true }, + { 124871, true }, + { 124892, false }, + { 124903, true }, + { 124922, true }, + { 124933, false }, + { 124951, true }, + { 124963, true }, + { 124974, true }, + { 125004, true }, { 125015, true }, - { 125028, true }, - { 125045, true }, - { 125061, true }, - { 125079, true }, - { 125101, true }, - { 125118, true }, - { 125132, true }, - { 125146, true }, - { 125162, true }, - { 125182, true }, - { 125197, true }, - { 125214, true }, - { 125241, true }, - { 125260, true }, - { 125275, true }, - { 125286, true }, - { 125300, true }, - { 125317, true }, - { 125333, true }, - { 125350, true }, - { 125365, true }, - { 125376, true }, - { 125392, true }, - { 125408, true }, - { 125425, true }, + { 125029, true }, + { 125043, true }, + { 125055, true }, + { 125069, true }, + { 125089, true }, + { 125104, true }, + { 125115, true }, + { 125139, true }, + { 125160, true }, + { 125173, true }, + { 125190, true }, + { 125206, true }, + { 125224, true }, + { 125246, true }, + { 125263, true }, + { 125277, true }, + { 125291, true }, + { 125307, true }, + { 125327, true }, + { 125342, true }, + { 125359, true }, + { 125386, true }, + { 125405, true }, + { 125420, true }, + { 125431, true }, { 125445, true }, - { 125460, true }, - { 125479, true }, + { 125462, true }, + { 125478, true }, { 125495, true }, - { 125505, true }, - { 125518, true }, + { 125510, true }, + { 125521, true }, { 125537, true }, { 125553, true }, - { 125573, true }, - { 125585, true }, - { 125602, false }, - { 125617, true }, - { 125629, true }, - { 125642, true }, - { 125652, true }, - { 125669, false }, - { 125679, true }, - { 125692, true }, - { 125709, true }, - { 125732, true }, - { 125749, true }, - { 125764, true }, - { 125783, true }, - { 125808, true }, - { 125841, true }, - { 125851, true }, - { 125865, true }, - { 125881, true }, - { 125900, false }, - { 125923, true }, - { 125937, true }, - { 125951, true }, - { 125963, true }, - { 125978, true }, - { 125998, true }, - { 126010, true }, - { 126030, true }, - { 126048, true }, - { 126059, true }, - { 126074, true }, - { 126087, true }, - { 126100, true }, - { 126113, true }, - { 126124, true }, - { 126139, true }, - { 126150, true }, - { 126166, true }, - { 126180, true }, - { 126192, true }, - { 126206, true }, - { 126214, true }, - { 126233, true }, - { 126247, true }, - { 126269, true }, - { 126286, true }, - { 126295, true }, + { 125570, true }, + { 125590, true }, + { 125605, true }, + { 125624, true }, + { 125640, true }, + { 125650, true }, + { 125663, true }, + { 125682, true }, + { 125698, true }, + { 125718, true }, + { 125730, true }, + { 125747, false }, + { 125762, true }, + { 125774, true }, + { 125787, true }, + { 125797, true }, + { 125814, true }, + { 125826, false }, + { 125836, true }, + { 125849, true }, + { 125866, true }, + { 125889, true }, + { 125906, true }, + { 125925, true }, + { 125950, true }, + { 125983, true }, + { 125993, true }, + { 126007, true }, + { 126023, true }, + { 126042, false }, + { 126065, true }, + { 126079, true }, + { 126093, true }, + { 126105, true }, + { 126120, true }, + { 126140, true }, + { 126152, true }, + { 126172, true }, + { 126190, true }, + { 126201, true }, + { 126216, true }, + { 126229, true }, + { 126242, true }, + { 126255, true }, + { 126266, true }, + { 126281, true }, + { 126292, true }, { 126308, true }, - { 126318, false }, - { 126330, true }, - { 126341, true }, - { 126351, true }, - { 126374, true }, - { 126388, true }, - { 126403, true }, - { 126427, true }, - { 126446, true }, - { 126460, true }, - { 126474, true }, - { 126495, true }, - { 126514, true }, - { 126524, true }, - { 126540, true }, - { 126557, true }, - { 126570, true }, - { 126587, true }, - { 126603, true }, - { 126622, true }, - { 126635, true }, - { 126647, true }, - { 126655, true }, - { 126671, true }, - { 126687, true }, - { 126707, true }, - { 126725, true }, - { 126739, false }, - { 126756, true }, - { 126773, true }, - { 126787, true }, - { 126808, true }, - { 126827, true }, - { 126845, true }, - { 126858, true }, - { 126868, true }, - { 126886, true }, - { 126906, true }, + { 126322, true }, + { 126334, true }, + { 126348, true }, + { 126356, true }, + { 126375, true }, + { 126389, true }, + { 126411, true }, + { 126428, true }, + { 126437, true }, + { 126450, true }, + { 126460, false }, + { 126472, true }, + { 126483, true }, + { 126493, true }, + { 126516, true }, + { 126530, true }, + { 126545, true }, + { 126569, true }, + { 126588, true }, + { 126602, true }, + { 126616, true }, + { 126637, true }, + { 126656, true }, + { 126666, true }, + { 126682, true }, + { 126699, true }, + { 126712, true }, + { 126729, true }, + { 126745, true }, + { 126764, true }, + { 126777, true }, + { 126789, true }, + { 126797, true }, + { 126813, true }, + { 126829, true }, + { 126849, true }, + { 126867, true }, + { 126881, false }, + { 126898, true }, { 126915, true }, { 126929, true }, - { 126946, true }, + { 126950, true }, { 126969, true }, - { 126978, true }, - { 126994, true }, - { 127012, true }, - { 127024, true }, - { 127037, true }, - { 127050, true }, - { 127066, true }, - { 127074, false }, - { 127086, true }, - { 127096, true }, - { 127110, true }, + { 126987, true }, + { 127000, true }, + { 127010, true }, + { 127028, true }, + { 127048, true }, + { 127057, true }, + { 127071, true }, + { 127088, true }, + { 127111, true }, { 127120, true }, - { 127139, true }, + { 127136, true }, { 127154, true }, - { 127169, true }, - { 127188, true }, - { 127210, true }, - { 127229, true }, - { 127243, true }, - { 127255, true }, - { 127269, true }, - { 127282, false }, - { 127304, true }, - { 127321, true }, - { 127339, true }, + { 127166, true }, + { 127179, true }, + { 127192, true }, + { 127208, true }, + { 127216, false }, + { 127228, true }, + { 127238, true }, + { 127252, true }, + { 127262, true }, + { 127281, true }, + { 127296, true }, + { 127311, true }, + { 127330, true }, { 127352, true }, - { 127366, true }, - { 127377, true }, - { 127391, false }, + { 127371, true }, + { 127385, true }, + { 127397, true }, { 127411, true }, - { 127422, false }, - { 127431, false }, - { 127447, true }, - { 127462, false }, - { 127480, true }, - { 127493, true }, - { 127503, true }, - { 127514, false }, - { 127529, true }, - { 127538, true }, - { 127550, true }, - { 127559, true }, - { 127572, true }, - { 127585, true }, - { 127598, true }, - { 127615, false }, - { 127632, true }, - { 127639, true }, - { 127647, true }, - { 127656, true }, - { 127668, true }, - { 127691, true }, - { 127705, true }, - { 127719, true }, - { 127736, false }, - { 127752, false }, - { 127766, true }, - { 127773, true }, - { 127783, true }, - { 127794, true }, - { 127809, true }, - { 127821, true }, - { 127829, true }, - { 127841, true }, - { 127856, false }, - { 127866, true }, + { 127424, false }, + { 127446, true }, + { 127463, true }, + { 127481, true }, + { 127494, true }, + { 127508, true }, + { 127519, true }, + { 127533, false }, + { 127553, true }, + { 127564, false }, + { 127573, false }, + { 127589, true }, + { 127604, false }, + { 127622, true }, + { 127635, true }, + { 127645, true }, + { 127656, false }, + { 127671, true }, + { 127680, true }, + { 127692, true }, + { 127701, true }, + { 127714, true }, + { 127727, true }, + { 127740, true }, + { 127757, false }, + { 127774, true }, + { 127781, true }, + { 127789, true }, + { 127798, true }, + { 127810, true }, + { 127833, true }, + { 127847, true }, + { 127861, true }, { 127878, true }, - { 127890, true }, - { 127905, true }, - { 127934, true }, - { 127948, true }, - { 127956, true }, - { 127964, true }, - { 127973, true }, - { 127986, true }, - { 127994, true }, - { 128005, true }, - { 128016, true }, - { 128023, true }, - { 128032, true }, - { 128042, true }, - { 128062, true }, - { 128074, true }, - { 128086, true }, - { 128095, false }, + { 127892, false }, + { 127908, false }, + { 127922, true }, + { 127929, true }, + { 127939, true }, + { 127950, true }, + { 127965, true }, + { 127977, true }, + { 127985, true }, + { 127997, true }, + { 128012, false }, + { 128022, true }, + { 128034, true }, + { 128046, true }, + { 128061, true }, + { 128090, true }, { 128104, true }, - { 128124, false }, - { 128145, true }, - { 128156, true }, - { 128169, true }, - { 128178, true }, - { 128192, true }, - { 128209, true }, - { 128225, true }, - { 128243, true }, - { 128257, true }, - { 128274, true }, - { 128286, true }, - { 128299, true }, - { 128311, true }, + { 128112, true }, + { 128120, true }, + { 128129, true }, + { 128142, true }, + { 128150, true }, + { 128161, true }, + { 128172, true }, + { 128179, true }, + { 128188, true }, + { 128198, true }, + { 128218, true }, + { 128230, true }, + { 128242, true }, + { 128251, false }, + { 128260, true }, + { 128280, false }, + { 128301, true }, + { 128312, true }, { 128325, true }, - { 128343, true }, - { 128357, true }, - { 128373, false }, - { 128391, true }, - { 128408, true }, + { 128334, true }, + { 128348, true }, + { 128365, true }, + { 128381, true }, + { 128399, true }, + { 128413, true }, { 128430, true }, - { 128453, true }, - { 128464, true }, - { 128475, true }, - { 128486, true }, - { 128497, true }, - { 128509, true }, - { 128523, true }, - { 128534, true }, - { 128546, true }, - { 128562, true }, - { 128591, false }, - { 128610, true }, - { 128626, true }, - { 128652, true }, - { 128666, true }, - { 128683, true }, + { 128442, true }, + { 128455, true }, + { 128467, true }, + { 128481, true }, + { 128499, true }, + { 128513, true }, + { 128529, false }, + { 128547, true }, + { 128564, true }, + { 128586, true }, + { 128609, true }, + { 128620, true }, + { 128631, true }, + { 128642, true }, + { 128653, true }, + { 128665, true }, + { 128679, true }, + { 128690, true }, { 128702, true }, - { 128719, true }, - { 128735, true }, - { 128746, true }, - { 128754, true }, + { 128718, true }, + { 128747, false }, { 128766, true }, - { 128783, true }, - { 128796, true }, - { 128811, true }, - { 128824, true }, - { 128838, true }, - { 128850, true }, - { 128862, true }, - { 128876, true }, - { 128893, true }, - { 128906, true }, - { 128921, true }, - { 128934, true }, - { 128946, true }, - { 128960, true }, - { 128971, true }, + { 128782, true }, + { 128808, true }, + { 128822, true }, + { 128839, true }, + { 128858, true }, + { 128875, true }, + { 128891, true }, + { 128902, true }, + { 128910, true }, + { 128922, true }, + { 128939, true }, + { 128952, true }, + { 128967, true }, + { 128980, true }, { 128994, true }, - { 129012, true }, - { 129031, true }, - { 129044, true }, + { 129006, true }, + { 129018, true }, + { 129032, true }, + { 129049, true }, { 129062, true }, - { 129079, true }, - { 129096, true }, - { 129107, true }, - { 129129, true }, - { 129151, true }, - { 129163, true }, - { 129171, true }, - { 129192, true }, - { 129213, true }, - { 129234, true }, + { 129077, true }, + { 129090, true }, + { 129102, true }, + { 129116, true }, + { 129127, true }, + { 129150, true }, + { 129168, true }, + { 129187, true }, + { 129200, true }, + { 129218, true }, + { 129235, true }, { 129252, true }, - { 129268, true }, - { 129280, true }, - { 129292, true }, - { 129310, true }, - { 129320, true }, - { 129334, true }, - { 129350, true }, - { 129376, false }, - { 129405, true }, - { 129416, true }, - { 129432, true }, - { 129447, true }, - { 129458, true }, - { 129472, true }, - { 129499, true }, - { 129517, true }, - { 129534, false }, - { 129545, true }, - { 129555, true }, - { 129570, true }, - { 129581, true }, - { 129599, true }, - { 129617, true }, - { 129630, true }, - { 129641, true }, - { 129663, true }, - { 129682, true }, - { 129696, true }, - { 129708, false }, - { 129728, true }, - { 129738, true }, - { 129752, true }, - { 129770, true }, - { 129784, true }, - { 129796, true }, - { 129806, true }, - { 129818, true }, - { 129826, true }, - { 129843, true }, - { 129857, true }, - { 129878, true }, - { 129890, true }, + { 129263, true }, + { 129285, true }, + { 129307, true }, + { 129319, true }, + { 129327, true }, + { 129348, true }, + { 129369, true }, + { 129390, true }, + { 129408, true }, + { 129424, true }, + { 129436, true }, + { 129448, true }, + { 129466, true }, + { 129476, true }, + { 129490, true }, + { 129506, true }, + { 129532, false }, + { 129561, true }, + { 129572, true }, + { 129588, true }, + { 129603, true }, + { 129614, true }, + { 129628, true }, + { 129655, true }, + { 129673, true }, + { 129690, false }, + { 129701, true }, + { 129711, true }, + { 129726, true }, + { 129737, true }, + { 129755, true }, + { 129773, true }, + { 129786, true }, + { 129797, true }, + { 129819, true }, + { 129838, true }, + { 129852, true }, + { 129864, false }, + { 129884, true }, + { 129894, true }, { 129908, true }, - { 129924, true }, - { 129936, true }, - { 129948, true }, - { 129960, true }, - { 129972, true }, - { 129984, true }, - { 129996, true }, - { 130008, true }, - { 130020, false }, - { 130040, true }, - { 130049, true }, - { 130063, true }, - { 130079, true }, + { 129926, true }, + { 129940, true }, + { 129952, true }, + { 129962, true }, + { 129974, true }, + { 129982, true }, + { 129999, true }, + { 130013, true }, + { 130034, true }, + { 130046, true }, + { 130064, true }, + { 130080, true }, { 130092, true }, - { 130105, true }, + { 130104, true }, + { 130116, true }, { 130128, true }, - { 130141, true }, - { 130149, true }, - { 130164, false }, - { 130180, true }, - { 130190, true }, - { 130208, true }, - { 130222, true }, - { 130231, true }, - { 130244, true }, - { 130260, true }, - { 130275, true }, - { 130291, true }, - { 130303, true }, - { 130314, true }, - { 130329, true }, - { 130344, true }, - { 130356, true }, - { 130374, true }, - { 130393, true }, - { 130412, true }, - { 130434, true }, - { 130454, true }, - { 130473, true }, - { 130490, true }, - { 130508, true }, - { 130526, true }, - { 130544, true }, - { 130566, true }, - { 130580, true }, - { 130596, true }, - { 130613, true }, - { 130634, true }, - { 130649, true }, - { 130671, true }, - { 130695, true }, - { 130712, true }, - { 130723, true }, + { 130140, true }, + { 130152, true }, + { 130164, true }, + { 130176, false }, + { 130196, true }, + { 130205, true }, + { 130219, true }, + { 130235, true }, + { 130248, true }, + { 130261, true }, + { 130284, true }, + { 130297, true }, + { 130305, true }, + { 130320, false }, + { 130336, true }, + { 130346, true }, + { 130364, true }, + { 130378, true }, + { 130387, true }, + { 130400, true }, + { 130416, true }, + { 130431, true }, + { 130447, true }, + { 130459, true }, + { 130470, true }, + { 130485, true }, + { 130500, true }, + { 130512, true }, + { 130530, true }, + { 130549, true }, + { 130568, true }, + { 130590, true }, + { 130610, true }, + { 130629, true }, + { 130646, true }, + { 130664, true }, + { 130682, true }, + { 130700, true }, + { 130722, true }, { 130736, true }, - { 130749, true }, - { 130761, true }, - { 130771, true }, - { 130782, true }, - { 130797, true }, - { 130808, true }, - { 130820, true }, - { 130829, true }, - { 130839, true }, - { 130848, true }, - { 130859, true }, - { 130884, true }, - { 130896, true }, - { 130914, true }, - { 130930, true }, - { 130941, true }, - { 130957, true }, - { 130980, true }, - { 131001, true }, - { 131019, true }, - { 131038, true }, - { 131047, false }, - { 131061, true }, - { 131072, true }, - { 131085, true }, - { 131099, true }, - { 131114, true }, - { 131125, true }, + { 130752, true }, + { 130769, true }, + { 130790, true }, + { 130805, true }, + { 130827, true }, + { 130851, true }, + { 130868, true }, + { 130879, true }, + { 130892, true }, + { 130905, true }, + { 130917, true }, + { 130927, true }, + { 130938, true }, + { 130953, true }, + { 130964, true }, + { 130976, true }, + { 130985, true }, + { 130995, true }, + { 131004, true }, + { 131015, true }, + { 131040, true }, + { 131052, true }, + { 131070, true }, + { 131086, true }, + { 131097, true }, + { 131113, true }, { 131136, true }, - { 131149, true }, - { 131158, true }, - { 131172, true }, - { 131185, true }, - { 131199, true }, - { 131212, true }, - { 131223, true }, - { 131236, true }, - { 131248, true }, - { 131258, true }, - { 131272, true }, + { 131157, true }, + { 131175, true }, + { 131194, true }, + { 131203, false }, + { 131217, true }, + { 131228, true }, + { 131241, true }, + { 131255, true }, + { 131270, true }, { 131281, true }, - { 131296, true }, - { 131307, true }, - { 131320, true }, - { 131333, true }, - { 131352, true }, - { 131365, true }, - { 131383, true }, - { 131399, true }, - { 131411, true }, - { 131424, true }, - { 131436, true }, - { 131451, true }, - { 131461, true }, - { 131471, true }, - { 131482, true }, - { 131496, true }, - { 131507, true }, - { 131534, true }, - { 131548, true }, - { 131556, true }, - { 131578, true }, + { 131292, true }, + { 131305, true }, + { 131314, true }, + { 131328, true }, + { 131341, true }, + { 131355, true }, + { 131368, true }, + { 131379, true }, + { 131392, true }, + { 131404, true }, + { 131414, true }, + { 131428, true }, + { 131437, true }, + { 131452, true }, + { 131463, true }, + { 131476, true }, + { 131489, true }, + { 131508, true }, + { 131521, true }, + { 131539, true }, + { 131555, true }, + { 131567, true }, + { 131580, true }, { 131592, true }, - { 131606, true }, + { 131607, true }, { 131617, true }, - { 131636, true }, - { 131655, true }, - { 131674, true }, - { 131693, true }, - { 131713, true }, - { 131733, true }, - { 131753, true }, - { 131771, true }, - { 131790, true }, - { 131809, true }, - { 131828, true }, - { 131847, true }, - { 131861, true }, - { 131874, true }, - { 131886, true }, - { 131899, false }, - { 131921, true }, - { 131936, true }, - { 131948, true }, - { 131956, true }, - { 131981, true }, - { 131997, true }, - { 132006, true }, - { 132020, true }, - { 132032, true }, - { 132049, true }, - { 132062, true }, + { 131627, true }, + { 131638, true }, + { 131652, true }, + { 131663, true }, + { 131690, true }, + { 131704, true }, + { 131712, true }, + { 131734, true }, + { 131748, true }, + { 131762, true }, + { 131773, true }, + { 131792, true }, + { 131811, true }, + { 131830, true }, + { 131849, true }, + { 131869, true }, + { 131889, true }, + { 131909, true }, + { 131927, true }, + { 131946, true }, + { 131965, true }, + { 131984, true }, + { 132003, true }, + { 132017, true }, + { 132030, true }, + { 132042, true }, + { 132055, false }, { 132077, true }, - { 132093, true }, - { 132111, true }, - { 132124, true }, - { 132136, true }, - { 132146, true }, - { 132160, true }, - { 132175, true }, + { 132092, true }, + { 132104, true }, + { 132112, true }, + { 132137, true }, + { 132153, true }, + { 132162, true }, + { 132176, true }, { 132188, true }, - { 132199, true }, - { 132213, true }, - { 132228, true }, - { 132237, true }, - { 132250, true }, - { 132266, true }, - { 132285, true }, - { 132299, true }, - { 132314, true }, - { 132325, true }, - { 132335, true }, - { 132347, true }, - { 132362, true }, - { 132379, true }, - { 132410, true }, - { 132425, true }, - { 132443, true }, - { 132464, true }, - { 132478, true }, - { 132496, true }, - { 132506, true }, + { 132205, true }, + { 132218, true }, + { 132233, true }, + { 132249, true }, + { 132267, true }, + { 132280, true }, + { 132292, true }, + { 132302, true }, + { 132316, true }, + { 132331, true }, + { 132344, true }, + { 132355, true }, + { 132369, true }, + { 132384, true }, + { 132393, true }, + { 132406, true }, + { 132422, true }, + { 132441, true }, + { 132455, true }, + { 132470, true }, + { 132481, true }, + { 132491, true }, + { 132503, true }, { 132518, true }, - { 132528, true }, - { 132537, true }, - { 132550, true }, - { 132565, true }, - { 132578, true }, - { 132590, true }, - { 132598, true }, - { 132616, true }, - { 132631, true }, - { 132648, true }, - { 132663, true }, - { 132676, true }, - { 132692, true }, - { 132712, true }, - { 132727, true }, - { 132743, true }, - { 132757, true }, - { 132770, true }, - { 132780, true }, - { 132794, true }, + { 132535, true }, + { 132566, true }, + { 132581, true }, + { 132599, true }, + { 132620, true }, + { 132634, true }, + { 132652, true }, + { 132662, true }, + { 132674, true }, + { 132684, true }, + { 132693, true }, + { 132706, true }, + { 132721, true }, + { 132734, true }, + { 132746, true }, + { 132754, true }, + { 132772, true }, + { 132787, true }, { 132804, true }, - { 132824, true }, - { 132833, true }, - { 132843, true }, - { 132854, true }, - { 132867, true }, - { 132886, true }, - { 132896, true }, - { 132907, true }, - { 132920, true }, - { 132927, true }, + { 132819, true }, + { 132832, true }, + { 132848, true }, + { 132868, true }, + { 132883, true }, + { 132899, true }, + { 132913, true }, + { 132926, true }, { 132936, true }, - { 132952, true }, - { 132963, true }, - { 132970, true }, - { 132993, true }, - { 133002, true }, - { 133022, true }, - { 133030, true }, - { 133040, true }, - { 133061, true }, - { 133073, true }, - { 133082, true }, - { 133090, true }, - { 133099, true }, - { 133110, true }, - { 133120, true }, - { 133131, true }, - { 133138, true }, - { 133147, true }, - { 133155, true }, - { 133166, true }, + { 132950, true }, + { 132960, true }, + { 132980, true }, + { 132989, true }, + { 132999, true }, + { 133010, true }, + { 133023, true }, + { 133042, true }, + { 133052, true }, + { 133063, true }, + { 133076, true }, + { 133083, true }, + { 133092, true }, + { 133108, true }, + { 133119, true }, + { 133126, true }, + { 133149, true }, + { 133158, true }, { 133178, true }, { 133186, true }, - { 133194, true }, - { 133204, true }, - { 133220, true }, - { 133232, true }, - { 133262, true }, - { 133282, true }, - { 133296, false }, - { 133314, false }, - { 133330, true }, - { 133345, true }, - { 133361, true }, + { 133196, true }, + { 133217, true }, + { 133229, true }, + { 133238, true }, + { 133246, true }, + { 133255, true }, + { 133266, true }, + { 133276, true }, + { 133287, true }, + { 133294, true }, + { 133303, true }, + { 133311, true }, + { 133322, true }, + { 133334, true }, + { 133342, true }, + { 133350, true }, + { 133360, true }, { 133376, true }, - { 133397, true }, - { 133411, true }, - { 133430, true }, - { 133441, true }, - { 133451, true }, - { 133469, true }, - { 133480, true }, - { 133491, true }, - { 133505, true }, - { 133519, true }, - { 133552, true }, - { 133566, true }, + { 133388, true }, + { 133418, true }, + { 133438, true }, + { 133452, false }, + { 133470, false }, + { 133486, true }, + { 133501, true }, + { 133517, true }, + { 133532, true }, + { 133553, true }, + { 133567, true }, { 133586, true }, - { 133599, false }, - { 133615, true }, - { 133629, true }, - { 133648, true }, - { 133674, true }, - { 133691, true }, - { 133704, true }, - { 133720, true }, - { 133728, true }, - { 133741, true }, - { 133748, true }, - { 133760, true }, - { 133772, true }, - { 133787, true }, - { 133797, true }, - { 133809, true }, - { 133820, true }, - { 133840, false }, - { 133858, true }, - { 133871, true }, - { 133882, true }, - { 133892, true }, - { 133906, true }, - { 133918, false }, - { 133934, true }, - { 133945, true }, - { 133954, true }, - { 133967, true }, - { 133975, true }, - { 133985, true }, - { 134002, true }, - { 134013, true }, - { 134029, true }, - { 134040, true }, - { 134052, true }, - { 134062, false }, - { 134077, true }, - { 134092, true }, - { 134107, false }, - { 134115, true }, + { 133597, true }, + { 133607, true }, + { 133625, true }, + { 133636, true }, + { 133647, true }, + { 133661, true }, + { 133675, true }, + { 133708, true }, + { 133722, true }, + { 133742, true }, + { 133755, false }, + { 133771, true }, + { 133785, true }, + { 133804, true }, + { 133830, true }, + { 133847, true }, + { 133860, true }, + { 133876, true }, + { 133884, true }, + { 133897, true }, + { 133904, true }, + { 133916, true }, + { 133928, true }, + { 133943, true }, + { 133953, true }, + { 133965, true }, + { 133976, true }, + { 133996, true }, + { 134004, false }, + { 134022, true }, + { 134035, true }, + { 134046, true }, + { 134056, true }, + { 134070, true }, + { 134082, false }, + { 134098, true }, + { 134109, true }, + { 134118, true }, { 134131, true }, - { 134143, true }, - { 134158, true }, + { 134139, true }, + { 134149, true }, + { 134166, true }, { 134177, true }, - { 134197, true }, - { 134208, true }, - { 134222, true }, - { 134238, true }, - { 134260, true }, - { 134273, true }, - { 134292, true }, - { 134305, true }, - { 134314, true }, - { 134329, true }, - { 134342, true }, - { 134354, true }, - { 134371, true }, - { 134395, true }, - { 134408, true }, - { 134420, true }, + { 134193, true }, + { 134204, true }, + { 134216, true }, + { 134226, false }, + { 134241, true }, + { 134256, true }, + { 134271, false }, + { 134279, true }, + { 134295, true }, + { 134307, true }, + { 134322, true }, + { 134341, true }, + { 134361, true }, + { 134372, true }, + { 134386, true }, + { 134402, true }, + { 134424, true }, { 134437, true }, - { 134449, true }, - { 134467, true }, - { 134480, true }, - { 134495, true }, - { 134502, true }, - { 134514, true }, - { 134524, true }, - { 134538, true }, - { 134551, true }, - { 134564, true }, - { 134578, true }, - { 134595, true }, - { 134610, true }, - { 134624, true }, - { 134636, true }, - { 134649, true }, - { 134669, true }, - { 134684, true }, - { 134699, true }, - { 134714, true }, - { 134733, true }, - { 134752, true }, - { 134771, true }, - { 134786, true }, - { 134797, true }, - { 134807, true }, - { 134820, false }, + { 134456, true }, + { 134469, true }, + { 134478, true }, + { 134493, true }, + { 134506, true }, + { 134518, true }, + { 134535, true }, + { 134559, true }, + { 134572, true }, + { 134584, true }, + { 134601, true }, + { 134613, true }, + { 134631, true }, + { 134644, true }, + { 134659, true }, + { 134666, true }, + { 134678, true }, + { 134688, true }, + { 134702, true }, + { 134715, true }, + { 134728, true }, + { 134742, true }, + { 134759, true }, + { 134774, true }, + { 134788, true }, + { 134800, true }, + { 134813, true }, { 134833, true }, - { 134847, true }, - { 134858, true }, - { 134873, true }, - { 134889, true }, - { 134902, true }, - { 134915, true }, + { 134848, true }, + { 134863, true }, + { 134878, true }, + { 134897, true }, + { 134916, true }, { 134935, true }, - { 134944, true }, - { 134960, true }, - { 134973, true }, - { 134989, true }, - { 135004, true }, - { 135018, true }, - { 135028, true }, - { 135041, true }, - { 135059, true }, - { 135067, false }, - { 135080, true }, - { 135098, true }, - { 135121, true }, - { 135139, true }, - { 135170, true }, - { 135200, true }, - { 135222, true }, - { 135238, true }, - { 135249, false }, + { 134950, true }, + { 134961, true }, + { 134971, true }, + { 134984, false }, + { 134997, true }, + { 135011, true }, + { 135022, true }, + { 135037, true }, + { 135053, true }, + { 135066, true }, + { 135079, true }, + { 135099, true }, + { 135108, true }, + { 135124, true }, + { 135137, true }, + { 135153, true }, + { 135168, true }, + { 135182, true }, + { 135192, true }, + { 135205, true }, + { 135223, true }, + { 135231, false }, + { 135244, true }, { 135262, true }, - { 135277, true }, - { 135294, false }, - { 135313, true }, - { 135324, true }, + { 135285, true }, + { 135303, true }, { 135334, true }, - { 135344, true }, - { 135359, true }, - { 135373, true }, - { 135383, true }, - { 135395, true }, - { 135411, true }, - { 135422, true }, - { 135439, true }, - { 135452, true }, - { 135462, true }, - { 135473, true }, - { 135483, false }, + { 135364, true }, + { 135386, true }, + { 135402, true }, + { 135413, false }, + { 135426, true }, + { 135441, true }, + { 135458, false }, + { 135477, true }, + { 135488, true }, { 135498, true }, - { 135513, true }, - { 135530, true }, - { 135545, false }, - { 135558, true }, - { 135571, true }, - { 135581, true }, - { 135598, true }, - { 135610, true }, - { 135624, true }, - { 135635, true }, - { 135652, true }, - { 135665, true }, - { 135674, true }, - { 135685, true }, - { 135695, true }, - { 135709, true }, - { 135720, true }, - { 135729, true }, - { 135743, true }, - { 135753, true }, - { 135763, true }, - { 135779, true }, - { 135790, true }, - { 135802, true }, - { 135812, true }, - { 135821, true }, - { 135834, true }, - { 135845, false }, - { 135853, true }, - { 135871, true }, - { 135878, true }, - { 135889, false }, - { 135909, true }, - { 135916, false }, - { 135932, true }, - { 135948, true }, + { 135508, true }, + { 135523, true }, + { 135537, true }, + { 135547, true }, + { 135559, true }, + { 135575, true }, + { 135586, true }, + { 135603, true }, + { 135616, true }, + { 135636, true }, + { 135646, true }, + { 135657, true }, + { 135667, false }, + { 135682, true }, + { 135697, true }, + { 135714, true }, + { 135729, false }, + { 135742, true }, + { 135755, true }, + { 135765, true }, + { 135782, true }, + { 135794, true }, + { 135808, true }, + { 135819, true }, + { 135836, true }, + { 135849, true }, + { 135858, true }, + { 135869, true }, + { 135879, true }, + { 135893, true }, + { 135904, true }, + { 135913, true }, + { 135927, true }, + { 135937, true }, + { 135947, true }, { 135963, true }, - { 135975, true }, - { 135995, true }, - { 136009, true }, - { 136025, true }, - { 136035, true }, - { 136048, true }, - { 136066, true }, - { 136080, true }, - { 136097, true }, + { 135974, true }, + { 135986, true }, + { 135996, true }, + { 136005, true }, + { 136018, true }, + { 136029, false }, + { 136037, true }, + { 136055, true }, + { 136062, true }, + { 136073, false }, + { 136093, true }, + { 136100, false }, { 136116, true }, { 136132, true }, - { 136151, true }, - { 136174, true }, - { 136186, true }, - { 136208, true }, - { 136222, true }, - { 136233, true }, - { 136243, true }, - { 136257, true }, - { 136267, true }, - { 136278, true }, - { 136293, true }, - { 136302, true }, - { 136311, true }, - { 136328, true }, - { 136344, true }, - { 136366, true }, - { 136382, true }, - { 136396, true }, - { 136416, true }, - { 136424, true }, + { 136147, true }, + { 136159, true }, + { 136179, true }, + { 136193, true }, + { 136209, true }, + { 136219, true }, + { 136232, true }, + { 136250, true }, + { 136264, true }, + { 136281, true }, + { 136300, true }, + { 136316, true }, + { 136335, true }, + { 136358, true }, + { 136370, true }, + { 136392, true }, + { 136406, true }, + { 136417, true }, + { 136427, true }, { 136441, true }, - { 136458, true }, - { 136472, true }, - { 136491, true }, - { 136507, false }, - { 136521, true }, - { 136534, true }, - { 136551, true }, + { 136451, true }, + { 136462, true }, + { 136477, true }, + { 136486, true }, + { 136495, true }, + { 136512, true }, + { 136528, true }, + { 136550, true }, { 136566, true }, - { 136585, true }, - { 136596, true }, - { 136607, true }, - { 136621, true }, - { 136635, true }, - { 136650, true }, - { 136671, true }, - { 136687, true }, + { 136580, true }, + { 136600, true }, + { 136608, true }, + { 136625, true }, + { 136642, true }, + { 136656, true }, + { 136675, true }, + { 136691, false }, { 136705, true }, - { 136723, true }, - { 136736, true }, - { 136764, true }, - { 136776, true }, - { 136792, true }, - { 136803, true }, - { 136811, true }, - { 136825, true }, - { 136839, false }, - { 136848, true }, - { 136855, false }, - { 136865, false }, - { 136885, true }, - { 136896, true }, - { 136906, true }, - { 136917, true }, - { 136927, false }, - { 136946, false }, - { 136959, false }, - { 136971, false }, - { 136992, true }, - { 137014, true }, - { 137027, true }, - { 137043, true }, - { 137061, true }, - { 137070, true }, - { 137082, true }, - { 137098, true }, - { 137109, true }, - { 137120, false }, - { 137136, true }, - { 137154, true }, - { 137169, true }, - { 137181, true }, - { 137196, true }, - { 137213, true }, + { 136718, true }, + { 136735, true }, + { 136750, true }, + { 136769, true }, + { 136780, true }, + { 136791, true }, + { 136805, true }, + { 136819, true }, + { 136834, true }, + { 136855, true }, + { 136871, true }, + { 136889, true }, + { 136907, true }, + { 136920, true }, + { 136948, true }, + { 136960, true }, + { 136976, true }, + { 136987, true }, + { 136995, true }, + { 137009, true }, + { 137023, false }, + { 137032, true }, + { 137039, false }, + { 137049, false }, + { 137069, true }, + { 137080, true }, + { 137090, true }, + { 137101, true }, + { 137111, false }, + { 137130, false }, + { 137143, false }, + { 137155, false }, + { 137176, true }, + { 137198, true }, + { 137211, true }, { 137227, true }, - { 137242, true }, - { 137261, true }, - { 137280, true }, - { 137291, true }, - { 137305, true }, - { 137323, false }, - { 137352, true }, - { 137366, true }, - { 137390, true }, - { 137409, true }, - { 137422, true }, - { 137437, true }, - { 137451, true }, - { 137466, true }, - { 137484, true }, - { 137494, false }, - { 137509, true }, - { 137517, true }, - { 137530, false }, - { 137544, true }, - { 137555, true }, - { 137563, true }, - { 137571, true }, - { 137585, true }, - { 137607, true }, - { 137619, true }, + { 137245, true }, + { 137254, true }, + { 137266, true }, + { 137282, true }, + { 137293, true }, + { 137304, false }, + { 137320, true }, + { 137338, true }, + { 137353, true }, + { 137365, true }, + { 137380, true }, + { 137397, true }, + { 137411, true }, + { 137426, true }, + { 137445, true }, + { 137464, true }, + { 137475, true }, + { 137489, true }, + { 137507, true }, + { 137517, false }, + { 137546, true }, + { 137560, true }, + { 137584, true }, + { 137603, true }, + { 137616, true }, { 137631, true }, - { 137643, true }, - { 137658, true }, + { 137645, true }, + { 137660, true }, { 137678, true }, - { 137701, true }, - { 137720, true }, - { 137739, true }, - { 137758, true }, - { 137777, true }, - { 137796, true }, - { 137815, true }, - { 137834, true }, - { 137851, true }, - { 137869, true }, - { 137886, true }, - { 137901, true }, - { 137919, true }, - { 137934, true }, - { 137947, true }, + { 137688, false }, + { 137703, true }, + { 137711, true }, + { 137724, false }, + { 137738, true }, + { 137749, true }, + { 137757, true }, + { 137765, true }, + { 137779, true }, + { 137801, true }, + { 137813, true }, + { 137825, true }, + { 137837, true }, + { 137852, true }, + { 137872, true }, + { 137895, true }, + { 137914, true }, + { 137933, true }, + { 137952, true }, { 137971, true }, - { 137988, true }, - { 138006, true }, - { 138022, true }, - { 138040, true }, - { 138057, true }, - { 138073, true }, - { 138086, true }, - { 138099, true }, - { 138116, true }, - { 138137, true }, - { 138152, true }, - { 138169, true }, - { 138181, true }, - { 138192, true }, + { 137990, true }, + { 138009, true }, + { 138028, true }, + { 138045, true }, + { 138063, true }, + { 138080, true }, + { 138095, true }, + { 138113, true }, + { 138128, true }, + { 138141, true }, + { 138165, true }, + { 138182, true }, { 138200, true }, - { 138213, true }, - { 138227, true }, - { 138243, true }, - { 138259, true }, - { 138272, true }, - { 138285, true }, - { 138295, true }, - { 138308, true }, - { 138323, true }, - { 138333, true }, - { 138344, true }, - { 138359, true }, - { 138374, false }, - { 138384, false }, - { 138394, false }, - { 138404, true }, - { 138416, true }, - { 138424, false }, - { 138435, true }, - { 138443, true }, - { 138452, true }, - { 138465, true }, - { 138477, true }, - { 138497, true }, - { 138518, true }, - { 138534, true }, - { 138551, true }, - { 138570, true }, - { 138584, true }, - { 138594, true }, - { 138605, true }, - { 138614, true }, - { 138623, true }, - { 138636, true }, - { 138665, true }, - { 138684, true }, - { 138701, true }, - { 138724, true }, - { 138732, true }, - { 138750, true }, - { 138761, true }, - { 138774, true }, - { 138785, true }, - { 138798, true }, - { 138811, true }, - { 138828, true }, - { 138841, true }, - { 138852, true }, - { 138861, true }, - { 138871, true }, - { 138881, true }, - { 138894, true }, - { 138905, true }, - { 138915, true }, - { 138928, true }, - { 138938, true }, - { 138951, true }, - { 138970, true }, - { 138981, true }, + { 138216, true }, + { 138234, true }, + { 138251, true }, + { 138267, true }, + { 138280, true }, + { 138293, true }, + { 138310, true }, + { 138331, true }, + { 138346, true }, + { 138363, true }, + { 138375, true }, + { 138386, true }, + { 138394, true }, + { 138407, true }, + { 138421, true }, + { 138448, true }, + { 138464, true }, + { 138480, true }, + { 138493, true }, + { 138506, true }, + { 138516, true }, + { 138529, true }, + { 138544, true }, + { 138554, true }, + { 138565, true }, + { 138580, true }, + { 138595, false }, + { 138605, false }, + { 138615, true }, + { 138627, true }, + { 138635, false }, + { 138646, true }, + { 138654, true }, + { 138663, true }, + { 138676, true }, + { 138688, true }, + { 138708, true }, + { 138729, true }, + { 138745, true }, + { 138762, true }, + { 138781, true }, + { 138795, true }, + { 138805, true }, + { 138816, true }, + { 138825, true }, + { 138834, true }, + { 138847, true }, + { 138876, true }, + { 138895, true }, + { 138912, true }, + { 138935, true }, + { 138943, true }, + { 138961, true }, + { 138972, true }, + { 138985, true }, { 138996, true }, - { 139010, true }, - { 139021, true }, - { 139029, true }, - { 139043, true }, - { 139058, false }, - { 139072, false }, - { 139084, true }, - { 139095, false }, - { 139110, true }, - { 139124, true }, - { 139133, true }, - { 139154, true }, - { 139169, true }, + { 139009, true }, + { 139022, true }, + { 139039, true }, + { 139052, true }, + { 139063, true }, + { 139072, true }, + { 139082, true }, + { 139092, true }, + { 139105, true }, + { 139116, true }, + { 139126, true }, + { 139139, true }, + { 139149, true }, + { 139162, true }, { 139181, true }, { 139192, true }, - { 139205, true }, - { 139215, true }, - { 139236, true }, - { 139254, true }, - { 139275, true }, - { 139301, true }, - { 139324, true }, - { 139357, true }, - { 139376, true }, - { 139400, true }, - { 139411, true }, - { 139425, true }, - { 139436, false }, - { 139460, true }, - { 139471, true }, - { 139485, true }, - { 139496, true }, - { 139506, true }, - { 139514, true }, - { 139521, true }, - { 139532, true }, - { 139543, true }, - { 139554, true }, - { 139564, true }, - { 139575, true }, - { 139584, true }, + { 139207, true }, + { 139221, true }, + { 139232, true }, + { 139244, true }, + { 139252, true }, + { 139266, true }, + { 139281, false }, + { 139295, false }, + { 139307, true }, + { 139318, false }, + { 139333, true }, + { 139347, true }, + { 139356, true }, + { 139377, true }, + { 139392, true }, + { 139404, true }, + { 139415, true }, + { 139428, true }, + { 139438, true }, + { 139459, true }, + { 139477, true }, + { 139498, true }, + { 139524, true }, + { 139547, true }, + { 139580, true }, { 139599, true }, - { 139614, true }, - { 139625, true }, + { 139623, true }, { 139634, true }, - { 139645, true }, - { 139656, true }, - { 139670, true }, - { 139679, true }, - { 139695, true }, - { 139703, true }, - { 139715, true }, - { 139727, true }, - { 139743, true }, - { 139751, true }, - { 139761, true }, - { 139780, true }, - { 139788, true }, - { 139801, true }, - { 139818, true }, - { 139829, true }, - { 139841, true }, - { 139850, true }, - { 139871, true }, - { 139890, true }, - { 139906, true }, - { 139921, true }, - { 139934, true }, - { 139951, true }, - { 139964, true }, - { 139980, true }, - { 139990, true }, - { 139998, true }, - { 140012, true }, - { 140031, false }, - { 140040, true }, - { 140050, true }, - { 140072, true }, + { 139648, true }, + { 139659, false }, + { 139683, true }, + { 139694, true }, + { 139708, true }, + { 139719, true }, + { 139729, true }, + { 139737, true }, + { 139744, true }, + { 139755, true }, + { 139766, true }, + { 139777, true }, + { 139787, true }, + { 139798, true }, + { 139807, true }, + { 139822, true }, + { 139837, true }, + { 139848, true }, + { 139857, true }, + { 139868, true }, + { 139879, true }, + { 139893, true }, + { 139902, true }, + { 139918, true }, + { 139926, true }, + { 139938, true }, + { 139950, true }, + { 139966, true }, + { 139974, true }, + { 139984, true }, + { 140003, true }, + { 140011, true }, + { 140024, true }, + { 140041, true }, + { 140052, true }, + { 140064, true }, + { 140073, true }, { 140094, true }, - { 140109, true }, - { 140122, true }, - { 140136, true }, + { 140113, true }, + { 140129, true }, { 140144, true }, - { 140156, true }, - { 140167, true }, - { 140179, true }, - { 140197, true }, - { 140210, true }, - { 140223, true }, - { 140235, true }, - { 140245, true }, - { 140254, true }, - { 140265, true }, - { 140276, false }, - { 140286, false }, - { 140302, true }, - { 140312, true }, - { 140327, true }, - { 140337, true }, - { 140351, true }, - { 140366, true }, - { 140378, true }, - { 140389, true }, + { 140157, true }, + { 140174, true }, + { 140187, true }, + { 140203, true }, + { 140213, true }, + { 140221, true }, + { 140229, true }, + { 140243, true }, + { 140262, false }, + { 140271, true }, + { 140281, true }, + { 140303, true }, + { 140325, true }, + { 140340, true }, + { 140353, true }, + { 140367, true }, + { 140375, true }, + { 140387, true }, { 140398, true }, - { 140411, true }, - { 140421, true }, - { 140434, true }, - { 140445, true }, - { 140468, false }, - { 140482, true }, - { 140494, true }, - { 140507, true }, - { 140516, true }, - { 140529, false }, - { 140539, true }, - { 140555, true }, - { 140566, true }, - { 140580, true }, - { 140594, true }, - { 140604, true }, - { 140613, true }, - { 140623, true }, - { 140638, true }, - { 140650, true }, - { 140662, true }, + { 140410, true }, + { 140428, true }, + { 140441, true }, + { 140454, true }, + { 140466, true }, + { 140476, true }, + { 140485, true }, + { 140496, true }, + { 140507, false }, + { 140517, false }, + { 140533, true }, + { 140543, true }, + { 140558, true }, + { 140568, true }, + { 140582, true }, + { 140597, true }, + { 140609, true }, + { 140620, true }, + { 140629, true }, + { 140642, true }, + { 140652, true }, + { 140665, true }, { 140676, true }, - { 140693, true }, - { 140703, false }, - { 140712, false }, - { 140731, true }, + { 140699, false }, + { 140713, true }, + { 140725, true }, + { 140738, true }, { 140747, true }, - { 140762, true }, - { 140772, true }, - { 140784, true }, - { 140796, false }, - { 140808, true }, - { 140821, true }, - { 140839, true }, + { 140760, false }, + { 140770, true }, + { 140786, true }, + { 140797, true }, + { 140811, true }, + { 140825, true }, + { 140835, true }, + { 140844, true }, { 140854, true }, - { 140869, false }, - { 140885, true }, - { 140897, true }, - { 140910, true }, - { 140922, true }, - { 140933, true }, - { 140946, false }, - { 140961, true }, - { 140976, true }, - { 140986, true }, - { 140996, true }, - { 141010, true }, - { 141024, true }, - { 141036, true }, + { 140869, true }, + { 140881, true }, + { 140893, true }, + { 140907, true }, + { 140924, true }, + { 140934, false }, + { 140943, false }, + { 140962, true }, + { 140978, true }, + { 140993, true }, + { 141003, true }, + { 141015, true }, + { 141027, false }, + { 141039, true }, { 141052, true }, - { 141063, true }, - { 141074, true }, - { 141092, true }, - { 141110, true }, - { 141123, true }, - { 141144, false }, - { 141163, true }, - { 141183, true }, - { 141205, true }, + { 141070, true }, + { 141085, true }, + { 141100, false }, + { 141116, true }, + { 141128, true }, + { 141141, true }, + { 141153, true }, + { 141164, true }, + { 141177, false }, + { 141192, true }, + { 141207, true }, { 141217, true }, - { 141232, true }, - { 141244, true }, - { 141260, true }, - { 141275, true }, - { 141291, true }, - { 141307, true }, - { 141324, true }, - { 141340, true }, - { 141357, true }, - { 141379, true }, - { 141396, true }, - { 141418, true }, - { 141429, true }, - { 141445, true }, - { 141465, true }, - { 141476, true }, + { 141227, true }, + { 141241, true }, + { 141255, true }, + { 141267, true }, + { 141283, true }, + { 141294, true }, + { 141305, true }, + { 141323, true }, + { 141341, true }, + { 141354, true }, + { 141375, false }, + { 141394, true }, + { 141414, true }, + { 141436, true }, + { 141448, true }, + { 141463, true }, + { 141475, true }, { 141491, true }, - { 141507, true }, + { 141506, true }, { 141522, true }, - { 141537, true }, - { 141551, true }, - { 141574, true }, - { 141586, true }, - { 141601, true }, - { 141626, true }, - { 141638, true }, - { 141653, true }, - { 141669, true }, - { 141684, true }, - { 141713, true }, - { 141735, true }, + { 141538, true }, + { 141555, true }, + { 141571, true }, + { 141588, true }, + { 141610, true }, + { 141627, true }, + { 141649, true }, + { 141660, true }, + { 141676, true }, + { 141696, true }, + { 141707, true }, + { 141722, true }, + { 141738, true }, { 141753, true }, - { 141767, true }, - { 141780, true }, - { 141795, true }, - { 141810, true }, + { 141768, true }, + { 141782, true }, + { 141805, true }, { 141817, true }, - { 141833, true }, - { 141844, true }, - { 141855, true }, - { 141865, true }, - { 141876, true }, - { 141890, true }, - { 141904, true }, - { 141916, true }, - { 141928, true }, - { 141939, true }, - { 141954, true }, - { 141967, true }, - { 141996, true }, - { 142005, true }, - { 142020, true }, - { 142027, true }, - { 142037, true }, - { 142047, true }, - { 142056, true }, - { 142072, true }, - { 142081, true }, - { 142090, true }, - { 142102, true }, - { 142118, true }, - { 142137, true }, - { 142149, false }, - { 142166, false }, - { 142186, true }, - { 142201, true }, - { 142217, true }, - { 142230, true }, - { 142248, true }, - { 142263, true }, - { 142272, true }, + { 141832, true }, + { 141857, true }, + { 141869, true }, + { 141884, true }, + { 141900, true }, + { 141915, true }, + { 141944, true }, + { 141966, true }, + { 141984, true }, + { 141998, true }, + { 142011, true }, + { 142026, true }, + { 142041, true }, + { 142048, true }, + { 142064, true }, + { 142075, true }, + { 142086, true }, + { 142096, true }, + { 142107, true }, + { 142121, true }, + { 142135, true }, + { 142147, true }, + { 142159, true }, + { 142170, true }, + { 142185, true }, + { 142198, true }, + { 142227, true }, + { 142236, true }, + { 142251, true }, + { 142258, true }, + { 142268, true }, + { 142278, true }, { 142287, true }, - { 142301, true }, - { 142317, true }, - { 142332, true }, - { 142354, true }, - { 142375, true }, - { 142394, true }, - { 142413, true }, - { 142429, true }, - { 142440, true }, - { 142449, true }, - { 142459, true }, - { 142478, true }, - { 142493, true }, - { 142507, true }, - { 142520, true }, - { 142528, true }, - { 142536, true }, - { 142545, true }, - { 142557, true }, - { 142569, true }, - { 142578, true }, - { 142590, true }, - { 142598, true }, - { 142610, true }, - { 142636, true }, - { 142659, false }, - { 142675, true }, - { 142689, true }, + { 142303, true }, + { 142312, true }, + { 142321, true }, + { 142333, true }, + { 142349, true }, + { 142368, true }, + { 142380, false }, + { 142397, false }, + { 142417, true }, + { 142432, true }, + { 142448, true }, + { 142461, true }, + { 142479, true }, + { 142494, true }, + { 142503, true }, + { 142518, true }, + { 142532, true }, + { 142548, true }, + { 142563, true }, + { 142585, true }, + { 142606, true }, + { 142625, true }, + { 142644, true }, + { 142660, true }, + { 142671, true }, + { 142680, true }, + { 142690, true }, { 142709, true }, - { 142720, true }, - { 142741, true }, - { 142760, true }, - { 142774, true }, + { 142724, true }, + { 142738, true }, + { 142751, true }, + { 142759, true }, + { 142767, true }, + { 142776, true }, { 142788, true }, - { 142805, true }, - { 142819, false }, - { 142834, true }, - { 142842, true }, - { 142857, true }, - { 142872, true }, - { 142883, true }, - { 142897, true }, - { 142908, true }, - { 142926, true }, - { 142943, true }, - { 142963, true }, - { 142987, true }, - { 142994, true }, + { 142800, true }, + { 142809, true }, + { 142821, true }, + { 142829, true }, + { 142841, true }, + { 142867, true }, + { 142890, false }, + { 142906, true }, + { 142920, true }, + { 142940, true }, + { 142951, true }, + { 142972, true }, + { 142991, true }, { 143005, true }, - { 143016, true }, - { 143029, true }, - { 143041, false }, - { 143056, true }, - { 143072, true }, - { 143085, true }, - { 143093, true }, + { 143019, true }, + { 143036, true }, + { 143050, false }, + { 143065, true }, + { 143073, true }, + { 143088, true }, { 143103, true }, - { 143118, false }, - { 143127, true }, - { 143141, true }, - { 143156, true }, - { 143166, true }, - { 143178, true }, - { 143188, true }, - { 143201, true }, - { 143213, true }, - { 143221, true }, - { 143232, true }, + { 143114, true }, + { 143128, true }, + { 143139, true }, + { 143149, true }, + { 143167, true }, + { 143184, true }, + { 143204, true }, + { 143228, true }, + { 143235, true }, { 143246, true }, - { 143267, true }, - { 143280, true }, - { 143290, false }, - { 143310, true }, - { 143317, true }, - { 143324, true }, + { 143257, true }, + { 143270, true }, + { 143282, false }, + { 143297, true }, + { 143313, true }, + { 143326, true }, { 143334, true }, - { 143340, true }, - { 143350, true }, - { 143358, true }, - { 143367, false }, - { 143387, true }, - { 143396, true }, - { 143405, true }, - { 143413, true }, - { 143427, true }, + { 143344, true }, + { 143359, false }, + { 143368, true }, + { 143382, true }, + { 143397, true }, + { 143407, true }, + { 143419, true }, + { 143429, true }, { 143442, true }, { 143454, true }, - { 143467, true }, - { 143485, true }, - { 143496, true }, - { 143504, true }, - { 143514, true }, - { 143522, true }, - { 143534, true }, - { 143543, true }, - { 143556, true }, - { 143566, true }, - { 143578, true }, - { 143593, true }, - { 143605, true }, - { 143619, true }, - { 143635, true }, - { 143653, true }, - { 143666, true }, - { 143679, false }, - { 143692, true }, - { 143711, true }, + { 143462, true }, + { 143473, true }, + { 143487, true }, + { 143508, true }, + { 143521, true }, + { 143531, false }, + { 143551, true }, + { 143558, true }, + { 143565, true }, + { 143575, true }, + { 143581, true }, + { 143591, true }, + { 143599, true }, + { 143608, false }, + { 143628, true }, + { 143637, true }, + { 143646, true }, + { 143654, true }, + { 143668, true }, + { 143683, true }, + { 143695, true }, + { 143708, true }, { 143726, true }, - { 143734, true }, - { 143746, true }, - { 143760, true }, - { 143780, true }, - { 143792, true }, - { 143818, true }, - { 143836, true }, - { 143853, true }, - { 143870, true }, - { 143881, true }, - { 143899, true }, - { 143911, true }, - { 143924, true }, - { 143940, true }, - { 143954, true }, - { 143972, true }, - { 143988, true }, - { 144011, true }, - { 144030, true }, - { 144044, true }, - { 144060, true }, - { 144076, true }, - { 144093, true }, - { 144124, true }, - { 144154, false }, - { 144170, true }, + { 143737, true }, + { 143745, true }, + { 143755, true }, + { 143763, true }, + { 143775, true }, + { 143784, true }, + { 143797, true }, + { 143807, true }, + { 143819, true }, + { 143834, true }, + { 143846, true }, + { 143860, true }, + { 143876, true }, + { 143894, true }, + { 143907, true }, + { 143920, false }, + { 143933, true }, + { 143952, true }, + { 143967, true }, + { 143975, true }, + { 143987, true }, + { 144001, true }, + { 144021, true }, + { 144033, true }, + { 144059, true }, + { 144077, true }, + { 144094, true }, + { 144111, true }, + { 144122, true }, + { 144140, true }, + { 144152, true }, + { 144165, true }, { 144181, true }, - { 144193, true }, - { 144206, true }, - { 144223, true }, - { 144237, true }, - { 144262, true }, - { 144279, true }, - { 144298, true }, - { 144313, true }, - { 144333, true }, - { 144348, true }, - { 144359, true }, - { 144374, true }, - { 144392, true }, - { 144408, true }, - { 144420, true }, - { 144430, true }, + { 144195, true }, + { 144213, true }, + { 144229, true }, + { 144252, true }, + { 144271, true }, + { 144285, true }, + { 144301, true }, + { 144317, true }, + { 144334, true }, + { 144365, true }, + { 144395, false }, + { 144411, true }, + { 144422, true }, + { 144434, true }, { 144447, true }, - { 144459, false }, - { 144473, true }, - { 144480, false }, - { 144512, true }, - { 144526, true }, - { 144536, true }, - { 144550, true }, - { 144563, true }, - { 144580, true }, - { 144592, true }, - { 144606, true }, - { 144622, false }, - { 144637, true }, - { 144651, true }, - { 144662, true }, - { 144673, true }, - { 144685, true }, - { 144694, true }, - { 144701, true }, - { 144712, true }, - { 144720, true }, - { 144727, true }, - { 144737, true }, - { 144748, true }, - { 144756, true }, - { 144764, true }, - { 144772, true }, - { 144785, true }, - { 144800, true }, - { 144810, true }, - { 144820, true }, - { 144827, true }, - { 144839, true }, - { 144848, true }, - { 144864, true }, - { 144876, true }, - { 144888, true }, - { 144900, true }, - { 144911, true }, + { 144464, true }, + { 144478, true }, + { 144503, true }, + { 144520, true }, + { 144539, true }, + { 144554, true }, + { 144574, true }, + { 144589, true }, + { 144600, true }, + { 144615, true }, + { 144633, true }, + { 144649, true }, + { 144661, true }, + { 144671, true }, + { 144688, true }, + { 144700, false }, + { 144714, true }, + { 144721, false }, + { 144753, true }, + { 144767, true }, + { 144777, true }, + { 144791, true }, + { 144804, true }, + { 144821, true }, + { 144833, true }, + { 144847, true }, + { 144863, false }, + { 144878, true }, + { 144892, true }, + { 144903, true }, + { 144914, true }, { 144926, true }, - { 144934, true }, - { 144945, true }, - { 144956, true }, - { 144970, true }, + { 144935, true }, + { 144942, true }, + { 144953, true }, + { 144961, true }, + { 144968, true }, + { 144978, true }, { 144986, true }, - { 144998, true }, - { 145012, true }, - { 145026, true }, - { 145047, true }, - { 145062, true }, - { 145083, true }, - { 145091, true }, - { 145105, true }, - { 145112, true }, - { 145124, true }, - { 145138, true }, - { 145155, true }, - { 145168, true }, - { 145184, false }, - { 145197, true }, - { 145210, true }, - { 145224, true }, - { 145235, true }, - { 145245, true }, - { 145252, true }, - { 145264, true }, - { 145273, true }, - { 145282, true }, - { 145290, true }, - { 145305, true }, - { 145313, true }, - { 145325, false }, - { 145335, true }, - { 145345, true }, - { 145356, true }, - { 145365, true }, + { 144994, true }, + { 145002, true }, + { 145015, true }, + { 145030, true }, + { 145040, true }, + { 145050, true }, + { 145057, true }, + { 145069, true }, + { 145078, true }, + { 145094, true }, + { 145106, true }, + { 145118, true }, + { 145130, true }, + { 145141, true }, + { 145149, true }, + { 145160, true }, + { 145171, true }, + { 145185, true }, + { 145201, true }, + { 145213, true }, + { 145227, true }, + { 145241, true }, + { 145262, true }, + { 145277, true }, + { 145298, true }, + { 145306, true }, + { 145320, true }, + { 145327, true }, + { 145339, true }, + { 145353, true }, + { 145370, true }, { 145383, true }, - { 145393, true }, - { 145404, false }, - { 145415, true }, - { 145437, true }, - { 145445, true }, - { 145453, false }, - { 145461, true }, - { 145469, true }, - { 145485, true }, - { 145501, true }, - { 145514, true }, - { 145525, true }, - { 145537, true }, - { 145556, true }, - { 145582, true }, - { 145596, true }, - { 145610, true }, - { 145624, true }, - { 145639, false }, - { 145657, true }, - { 145673, true }, - { 145688, true }, - { 145699, true }, - { 145711, true }, - { 145722, true }, - { 145741, true }, - { 145757, true }, - { 145769, true }, - { 145781, true }, - { 145794, true }, - { 145806, true }, - { 145813, true }, - { 145826, true }, - { 145843, true }, - { 145865, true }, - { 145875, true }, - { 145885, true }, - { 145897, false }, - { 145908, true }, - { 145922, true }, - { 145931, true }, - { 145942, true }, - { 145960, true }, - { 145979, true }, - { 145995, true }, - { 146008, true }, - { 146024, true }, - { 146051, true }, - { 146063, true }, - { 146077, true }, - { 146085, true }, - { 146099, true }, - { 146109, true }, - { 146145, true }, - { 146178, true }, - { 146201, true }, - { 146214, true }, + { 145399, false }, + { 145412, true }, + { 145425, true }, + { 145439, true }, + { 145450, true }, + { 145460, true }, + { 145467, true }, + { 145479, true }, + { 145488, true }, + { 145497, true }, + { 145505, true }, + { 145520, true }, + { 145528, true }, + { 145540, false }, + { 145550, true }, + { 145560, true }, + { 145571, true }, + { 145580, true }, + { 145598, true }, + { 145608, true }, + { 145619, false }, + { 145630, true }, + { 145652, true }, + { 145660, true }, + { 145668, false }, + { 145676, true }, + { 145684, true }, + { 145700, true }, + { 145716, true }, + { 145729, true }, + { 145740, true }, + { 145752, true }, + { 145771, true }, + { 145797, true }, + { 145811, true }, + { 145825, true }, + { 145839, true }, + { 145854, false }, + { 145872, true }, + { 145888, true }, + { 145903, true }, + { 145914, true }, + { 145926, true }, + { 145937, true }, + { 145956, true }, + { 145972, true }, + { 145984, true }, + { 145996, true }, + { 146009, true }, + { 146021, true }, + { 146028, true }, + { 146041, true }, + { 146058, true }, + { 146080, true }, + { 146090, true }, + { 146100, true }, + { 146112, false }, + { 146123, true }, + { 146137, true }, + { 146146, true }, + { 146157, true }, + { 146175, true }, + { 146194, true }, + { 146210, true }, { 146223, true }, - { 146240, false }, - { 146263, true }, - { 146279, true }, - { 146297, true }, + { 146239, true }, + { 146266, true }, + { 146278, true }, + { 146292, true }, + { 146300, true }, { 146314, true }, - { 146338, true }, - { 146350, true }, - { 146359, true }, - { 146368, true }, - { 146380, true }, - { 146389, true }, - { 146397, true }, - { 146410, true }, - { 146421, true }, - { 146446, true }, - { 146457, true }, - { 146470, true }, - { 146484, true }, - { 146497, false }, - { 146508, true }, - { 146516, true }, - { 146524, true }, - { 146536, true }, - { 146544, true }, - { 146557, false }, - { 146568, true }, + { 146324, true }, + { 146360, true }, + { 146393, true }, + { 146416, true }, + { 146429, true }, + { 146438, true }, + { 146455, false }, + { 146478, true }, + { 146494, true }, + { 146512, true }, + { 146529, true }, + { 146553, true }, + { 146565, true }, + { 146574, true }, { 146583, true }, - { 146603, true }, - { 146611, true }, - { 146629, true }, - { 146649, true }, - { 146669, true }, - { 146690, true }, - { 146716, true }, - { 146726, true }, - { 146739, false }, - { 146757, true }, - { 146788, true }, - { 146808, true }, - { 146825, true }, - { 146843, true }, - { 146856, true }, - { 146871, true }, - { 146883, true }, - { 146893, true }, - { 146900, true }, - { 146920, true }, - { 146933, true }, - { 146950, true }, - { 146966, true }, - { 146978, true }, - { 146992, true }, - { 147004, true }, - { 147019, true }, - { 147037, true }, - { 147050, true }, - { 147060, true }, + { 146595, true }, + { 146604, true }, + { 146612, true }, + { 146625, true }, + { 146636, true }, + { 146661, true }, + { 146672, true }, + { 146685, true }, + { 146699, true }, + { 146712, false }, + { 146723, true }, + { 146731, true }, + { 146739, true }, + { 146751, true }, + { 146759, true }, + { 146772, false }, + { 146783, true }, + { 146798, true }, + { 146818, true }, + { 146826, true }, + { 146844, true }, + { 146864, true }, + { 146884, true }, + { 146905, true }, + { 146931, true }, + { 146941, true }, + { 146954, false }, + { 146972, true }, + { 147003, true }, + { 147023, true }, + { 147040, true }, + { 147058, true }, { 147071, true }, - { 147082, true }, - { 147093, true }, + { 147086, true }, + { 147098, true }, { 147108, true }, - { 147119, true }, - { 147131, false }, - { 147143, true }, - { 147157, true }, - { 147174, true }, - { 147184, true }, - { 147197, false }, - { 147215, false }, - { 147226, true }, - { 147241, true }, - { 147258, true }, + { 147115, true }, + { 147135, true }, + { 147148, true }, + { 147165, true }, + { 147181, true }, + { 147193, true }, + { 147207, true }, + { 147219, true }, + { 147234, true }, + { 147252, true }, + { 147265, true }, { 147275, true }, - { 147292, true }, - { 147302, true }, - { 147317, true }, - { 147327, true }, - { 147342, true }, - { 147359, true }, - { 147371, true }, - { 147382, true }, - { 147400, true }, - { 147415, true }, - { 147430, true }, - { 147455, true }, - { 147480, true }, - { 147493, true }, - { 147510, true }, - { 147529, true }, - { 147546, true }, - { 147566, true }, - { 147587, true }, - { 147601, true }, - { 147626, true }, - { 147647, true }, - { 147669, true }, - { 147699, true }, - { 147723, true }, - { 147738, true }, - { 147751, true }, + { 147286, true }, + { 147297, true }, + { 147308, true }, + { 147323, true }, + { 147334, true }, + { 147346, false }, + { 147358, true }, + { 147372, true }, + { 147389, true }, + { 147399, true }, + { 147412, false }, + { 147430, false }, + { 147441, true }, + { 147456, true }, + { 147473, true }, + { 147490, true }, + { 147507, true }, + { 147517, true }, + { 147532, true }, + { 147542, true }, + { 147557, true }, + { 147574, true }, + { 147586, true }, + { 147597, true }, + { 147615, true }, + { 147630, true }, + { 147645, true }, + { 147670, true }, + { 147695, true }, + { 147708, true }, + { 147725, true }, + { 147744, true }, { 147761, true }, - { 147784, true }, - { 147795, true }, + { 147781, true }, { 147802, true }, - { 147817, true }, - { 147836, true }, - { 147845, true }, - { 147852, true }, - { 147872, true }, - { 147883, true }, - { 147902, true }, - { 147918, true }, - { 147928, true }, - { 147939, true }, - { 147949, true }, - { 147960, true }, - { 147972, true }, - { 147988, true }, - { 147996, true }, - { 148006, true }, - { 148016, true }, - { 148028, true }, - { 148039, true }, - { 148054, true }, - { 148078, true }, - { 148092, true }, - { 148100, true }, - { 148118, true }, - { 148129, true }, - { 148142, true }, - { 148153, true }, - { 148172, true }, - { 148184, true }, - { 148195, true }, - { 148210, true }, - { 148225, true }, - { 148239, true }, - { 148251, true }, + { 147816, true }, + { 147841, true }, + { 147862, true }, + { 147884, true }, + { 147914, true }, + { 147938, true }, + { 147953, true }, + { 147966, true }, + { 147976, true }, + { 147999, true }, + { 148010, true }, + { 148017, true }, + { 148032, true }, + { 148051, true }, + { 148060, true }, + { 148067, true }, + { 148087, true }, + { 148098, true }, + { 148117, true }, + { 148133, true }, + { 148143, true }, + { 148154, true }, + { 148164, true }, + { 148175, true }, + { 148187, true }, + { 148203, true }, + { 148211, true }, + { 148221, true }, + { 148231, true }, + { 148243, true }, + { 148254, true }, { 148269, true }, - { 148289, true }, - { 148301, true }, - { 148318, true }, + { 148293, true }, + { 148307, true }, + { 148315, true }, { 148333, true }, - { 148347, true }, - { 148361, true }, - { 148372, true }, - { 148381, true }, - { 148394, true }, - { 148403, true }, - { 148421, true }, - { 148432, true }, - { 148444, true }, - { 148458, true }, - { 148465, true }, - { 148476, true }, - { 148493, false }, - { 148519, false }, - { 148531, true }, - { 148544, true }, - { 148555, true }, - { 148572, true }, - { 148582, true }, - { 148595, true }, - { 148616, true }, - { 148632, true }, - { 148656, true }, - { 148670, true }, - { 148681, true }, - { 148695, true }, - { 148712, true }, - { 148724, true }, - { 148739, true }, - { 148749, true }, - { 148762, true }, - { 148775, true }, - { 148788, true }, - { 148808, true }, - { 148830, true }, - { 148844, true }, - { 148859, false }, - { 148872, true }, - { 148887, true }, - { 148898, true }, - { 148918, true }, - { 148931, true }, - { 148952, true }, - { 148963, true }, - { 148982, true }, + { 148344, true }, + { 148357, true }, + { 148368, true }, + { 148387, true }, + { 148399, true }, + { 148410, true }, + { 148425, true }, + { 148440, true }, + { 148454, true }, + { 148466, true }, + { 148484, true }, + { 148504, true }, + { 148516, true }, + { 148533, true }, + { 148548, true }, + { 148562, true }, + { 148576, true }, + { 148587, true }, + { 148596, true }, + { 148609, true }, + { 148618, true }, + { 148636, true }, + { 148647, true }, + { 148659, true }, + { 148673, true }, + { 148680, true }, + { 148691, true }, + { 148708, false }, + { 148734, false }, + { 148746, true }, + { 148759, true }, + { 148770, true }, + { 148787, true }, + { 148797, true }, + { 148810, true }, + { 148831, true }, + { 148847, true }, + { 148871, true }, + { 148885, true }, + { 148896, true }, + { 148910, true }, + { 148927, true }, + { 148939, true }, + { 148954, true }, + { 148964, true }, + { 148977, true }, { 148990, true }, - { 148998, true }, - { 149015, true }, - { 149031, true }, - { 149040, true }, - { 149055, true }, - { 149066, true }, - { 149077, true }, + { 149003, true }, + { 149023, true }, + { 149045, true }, + { 149059, true }, + { 149074, false }, { 149087, true }, - { 149097, true }, - { 149108, true }, - { 149118, true }, - { 149129, true }, - { 149136, true }, - { 149154, true }, - { 149166, true }, - { 149177, true }, - { 149199, true }, + { 149102, true }, + { 149113, true }, + { 149133, true }, + { 149146, true }, + { 149167, true }, + { 149178, true }, + { 149197, true }, + { 149205, true }, { 149213, true }, - { 149232, true }, - { 149240, true }, - { 149259, true }, + { 149230, true }, + { 149246, true }, + { 149255, true }, + { 149270, true }, { 149281, true }, - { 149290, true }, + { 149292, true }, { 149302, true }, - { 149320, true }, - { 149334, true }, - { 149353, true }, - { 149363, true }, - { 149372, true }, - { 149388, true }, - { 149396, true }, - { 149408, true }, - { 149423, true }, - { 149443, true }, - { 149451, true }, - { 149464, true }, - { 149473, true }, - { 149491, true }, - { 149503, true }, - { 149522, true }, - { 149536, true }, - { 149559, true }, - { 149572, true }, - { 149584, true }, - { 149608, true }, - { 149624, true }, + { 149312, true }, + { 149323, true }, + { 149333, true }, + { 149344, true }, + { 149351, true }, + { 149369, true }, + { 149381, true }, + { 149392, true }, + { 149414, true }, + { 149428, true }, + { 149447, true }, + { 149455, true }, + { 149474, true }, + { 149496, true }, + { 149505, true }, + { 149517, true }, + { 149535, true }, + { 149549, true }, + { 149568, true }, + { 149578, true }, + { 149587, true }, + { 149603, true }, + { 149611, true }, + { 149623, true }, { 149638, true }, - { 149655, true }, - { 149671, true }, + { 149658, true }, + { 149666, true }, + { 149679, true }, { 149688, true }, - { 149707, true }, - { 149723, true }, - { 149731, true }, - { 149749, true }, - { 149758, false }, - { 149767, true }, - { 149779, true }, - { 149793, true }, - { 149803, true }, - { 149816, true }, - { 149825, true }, - { 149848, true }, - { 149860, true }, - { 149876, true }, - { 149886, false }, - { 149895, true }, - { 149902, true }, - { 149911, true }, - { 149919, true }, - { 149928, false }, - { 149942, true }, - { 149956, true }, - { 149966, true }, - { 149976, true }, - { 149986, true }, - { 149998, true }, - { 150010, true }, - { 150028, false }, - { 150041, true }, - { 150056, true }, - { 150074, true }, - { 150084, true }, - { 150095, true }, - { 150107, true }, - { 150120, true }, + { 149706, true }, + { 149718, true }, + { 149737, true }, + { 149751, true }, + { 149774, true }, + { 149787, true }, + { 149799, true }, + { 149823, true }, + { 149839, true }, + { 149853, true }, + { 149870, true }, + { 149886, true }, + { 149903, true }, + { 149922, true }, + { 149938, true }, + { 149946, true }, + { 149964, true }, + { 149973, false }, + { 149982, true }, + { 149994, true }, + { 150008, true }, + { 150018, true }, + { 150031, true }, + { 150040, true }, + { 150063, true }, + { 150075, true }, + { 150091, true }, + { 150101, false }, + { 150110, true }, + { 150117, true }, + { 150126, true }, { 150134, true }, - { 150148, true }, - { 150158, true }, + { 150143, false }, + { 150157, true }, { 150171, true }, { 150181, true }, - { 150192, true }, - { 150209, true }, - { 150218, true }, - { 150231, true }, - { 150242, true }, - { 150260, true }, - { 150270, true }, - { 150280, true }, - { 150292, true }, - { 150304, true }, - { 150315, true }, - { 150332, true }, - { 150345, true }, - { 150359, true }, - { 150368, true }, - { 150381, false }, - { 150390, false }, - { 150401, true }, - { 150417, false }, - { 150432, false }, - { 150443, false }, - { 150450, true }, - { 150466, true }, - { 150484, true }, - { 150503, true }, - { 150518, true }, - { 150535, true }, - { 150549, true }, - { 150565, true }, - { 150586, true }, - { 150600, true }, - { 150625, true }, - { 150642, true }, - { 150661, true }, - { 150676, false }, - { 150690, true }, - { 150704, true }, - { 150717, true }, - { 150738, true }, + { 150191, true }, + { 150201, true }, + { 150213, true }, + { 150225, true }, + { 150243, false }, + { 150256, true }, + { 150271, true }, + { 150289, true }, + { 150299, true }, + { 150310, true }, + { 150322, true }, + { 150335, true }, + { 150349, true }, + { 150363, true }, + { 150373, true }, + { 150386, true }, + { 150396, true }, + { 150407, true }, + { 150424, true }, + { 150433, true }, + { 150446, true }, + { 150457, true }, + { 150475, true }, + { 150485, true }, + { 150495, true }, + { 150507, true }, + { 150519, true }, + { 150530, true }, + { 150547, true }, + { 150560, true }, + { 150574, true }, + { 150583, true }, + { 150596, false }, + { 150605, false }, + { 150616, true }, + { 150632, false }, + { 150647, false }, + { 150658, false }, + { 150665, true }, + { 150681, true }, + { 150699, true }, + { 150718, true }, + { 150733, true }, { 150750, true }, - { 150763, true }, - { 150773, true }, - { 150787, true }, - { 150807, true }, - { 150820, true }, - { 150839, true }, - { 150855, true }, - { 150873, true }, - { 150887, false }, - { 150899, true }, - { 150909, true }, - { 150923, true }, - { 150933, true }, - { 150949, true }, - { 150975, true }, - { 151003, true }, - { 151016, true }, - { 151031, true }, - { 151047, true }, - { 151071, true }, - { 151087, true }, - { 151102, true }, - { 151116, true }, - { 151128, true }, - { 151140, false }, - { 151158, true }, - { 151171, true }, + { 150764, true }, + { 150780, true }, + { 150801, true }, + { 150815, true }, + { 150840, true }, + { 150857, true }, + { 150876, true }, + { 150891, false }, + { 150905, true }, + { 150919, true }, + { 150932, true }, + { 150953, true }, + { 150965, true }, + { 150978, true }, + { 150988, true }, + { 151002, true }, + { 151022, true }, + { 151035, true }, + { 151054, true }, + { 151070, true }, + { 151088, true }, + { 151102, false }, + { 151114, true }, + { 151124, true }, + { 151138, true }, + { 151148, true }, + { 151164, true }, { 151190, true }, - { 151208, true }, - { 151223, true }, + { 151218, true }, + { 151231, true }, { 151246, true }, - { 151263, true }, - { 151282, true }, + { 151262, true }, + { 151286, true }, { 151302, true }, - { 151325, true }, - { 151344, true }, - { 151363, true }, - { 151382, true }, - { 151400, true }, - { 151419, true }, - { 151430, true }, - { 151440, true }, - { 151455, true }, - { 151476, true }, - { 151496, true }, - { 151515, true }, - { 151539, true }, - { 151553, true }, - { 151565, true }, - { 151575, true }, - { 151605, true }, - { 151628, true }, - { 151651, true }, - { 151680, true }, - { 151698, true }, - { 151714, true }, - { 151733, true }, - { 151745, true }, - { 151755, true }, - { 151775, false }, - { 151787, true }, - { 151800, true }, - { 151817, true }, - { 151835, true }, - { 151855, true }, - { 151870, true }, - { 151879, true }, - { 151891, true }, - { 151902, true }, - { 151914, true }, - { 151926, false }, - { 151943, true }, - { 151956, true }, - { 151974, true }, - { 151989, true }, - { 152004, true }, - { 152016, true }, - { 152030, true }, - { 152042, true }, - { 152062, true }, - { 152074, true }, - { 152088, true }, - { 152108, true }, - { 152122, true }, - { 152140, true }, - { 152153, true }, - { 152168, true }, - { 152184, true }, - { 152199, true }, - { 152211, true }, - { 152224, true }, - { 152240, true }, - { 152250, true }, + { 151317, true }, + { 151331, true }, + { 151343, true }, + { 151355, false }, + { 151373, true }, + { 151386, true }, + { 151405, true }, + { 151423, true }, + { 151438, true }, + { 151461, true }, + { 151478, true }, + { 151497, true }, + { 151517, true }, + { 151540, true }, + { 151559, true }, + { 151578, true }, + { 151597, true }, + { 151615, true }, + { 151634, true }, + { 151645, true }, + { 151655, true }, + { 151670, true }, + { 151691, true }, + { 151711, true }, + { 151730, true }, + { 151754, true }, + { 151768, true }, + { 151780, true }, + { 151790, true }, + { 151820, true }, + { 151843, true }, + { 151866, true }, + { 151895, true }, + { 151913, true }, + { 151929, true }, + { 151948, true }, + { 151960, true }, + { 151970, true }, + { 151990, false }, + { 152002, true }, + { 152015, true }, + { 152032, true }, + { 152050, true }, + { 152070, true }, + { 152085, true }, + { 152094, true }, + { 152106, true }, + { 152117, true }, + { 152129, true }, + { 152141, false }, + { 152158, true }, + { 152171, true }, + { 152189, true }, + { 152204, true }, + { 152219, true }, + { 152231, true }, + { 152245, true }, { 152257, true }, - { 152272, true }, - { 152292, true }, + { 152277, true }, + { 152289, true }, { 152303, true }, - { 152316, true }, - { 152325, true }, - { 152345, true }, - { 152365, true }, - { 152388, true }, - { 152408, true }, - { 152420, true }, - { 152431, true }, - { 152442, false }, - { 152453, true }, - { 152464, true }, - { 152475, false }, - { 152485, false }, - { 152502, true }, - { 152514, true }, - { 152530, true }, - { 152543, true }, - { 152552, true }, - { 152566, true }, - { 152577, true }, - { 152589, true }, - { 152607, true }, - { 152621, true }, - { 152634, true }, - { 152647, true }, - { 152656, true }, - { 152671, true }, - { 152682, true }, - { 152696, true }, - { 152716, true }, - { 152728, true }, - { 152738, true }, - { 152749, true }, - { 152782, true }, - { 152794, true }, - { 152808, true }, - { 152823, true }, - { 152837, true }, - { 152851, false }, + { 152323, true }, + { 152337, true }, + { 152355, true }, + { 152368, true }, + { 152383, true }, + { 152399, true }, + { 152414, true }, + { 152426, true }, + { 152439, true }, + { 152455, true }, + { 152465, true }, + { 152472, true }, + { 152487, true }, + { 152507, true }, + { 152518, true }, + { 152531, true }, + { 152540, true }, + { 152560, true }, + { 152580, true }, + { 152603, true }, + { 152623, true }, + { 152635, true }, + { 152646, true }, + { 152657, false }, + { 152668, true }, + { 152679, true }, + { 152690, false }, + { 152700, false }, + { 152717, true }, + { 152729, true }, + { 152745, true }, + { 152758, true }, + { 152767, true }, + { 152781, true }, + { 152792, true }, + { 152804, true }, + { 152822, true }, + { 152836, true }, + { 152849, true }, + { 152862, true }, { 152871, true }, - { 152888, true }, - { 152901, true }, - { 152916, true }, - { 152932, true }, - { 152950, true }, - { 152966, true }, - { 152983, true }, - { 152995, true }, + { 152886, true }, + { 152897, true }, + { 152911, true }, + { 152931, true }, + { 152943, true }, + { 152953, true }, + { 152964, true }, + { 152997, true }, { 153009, true }, - { 153025, true }, + { 153023, true }, { 153038, true }, - { 153050, true }, - { 153061, true }, - { 153068, true }, - { 153085, true }, - { 153098, true }, - { 153107, true }, - { 153118, true }, - { 153127, true }, - { 153140, true }, - { 153171, true }, - { 153184, true }, - { 153197, true }, + { 153052, true }, + { 153066, false }, + { 153086, true }, + { 153103, true }, + { 153116, true }, + { 153131, true }, + { 153147, true }, + { 153165, true }, + { 153181, true }, + { 153198, true }, { 153210, true }, - { 153221, true }, - { 153230, true }, - { 153245, true }, - { 153257, true }, - { 153273, true }, - { 153294, true }, - { 153311, false }, - { 153324, true }, - { 153338, true }, - { 153351, true }, - { 153362, true }, - { 153379, true }, - { 153390, true }, - { 153409, true }, - { 153427, false }, - { 153439, true }, - { 153449, true }, - { 153485, true }, - { 153498, true }, - { 153512, true }, - { 153521, false }, - { 153531, true }, - { 153543, true }, - { 153561, true }, - { 153575, true }, - { 153593, true }, - { 153614, true }, - { 153634, true }, - { 153657, true }, - { 153673, true }, - { 153687, true }, - { 153703, true }, - { 153716, true }, - { 153737, true }, - { 153757, true }, - { 153770, true }, - { 153779, true }, - { 153813, true }, - { 153830, true }, - { 153841, true }, - { 153852, true }, - { 153864, true }, - { 153875, true }, - { 153894, true }, - { 153906, true }, - { 153919, true }, - { 153935, true }, - { 153954, true }, - { 153969, true }, - { 153983, true }, - { 153998, true }, - { 154015, false }, - { 154030, true }, - { 154050, true }, - { 154061, true }, - { 154072, true }, - { 154092, false }, - { 154101, true }, - { 154110, true }, + { 153224, true }, + { 153240, true }, + { 153253, true }, + { 153265, true }, + { 153276, true }, + { 153283, true }, + { 153300, true }, + { 153313, true }, + { 153322, true }, + { 153333, true }, + { 153342, true }, + { 153355, true }, + { 153386, true }, + { 153399, true }, + { 153412, true }, + { 153425, true }, + { 153436, true }, + { 153445, true }, + { 153460, true }, + { 153472, true }, + { 153488, true }, + { 153509, true }, + { 153526, false }, + { 153539, true }, + { 153553, true }, + { 153566, true }, + { 153577, true }, + { 153594, true }, + { 153605, true }, + { 153624, true }, + { 153642, false }, + { 153654, true }, + { 153664, true }, + { 153700, true }, + { 153713, true }, + { 153727, true }, + { 153736, false }, + { 153746, true }, + { 153758, true }, + { 153776, true }, + { 153790, true }, + { 153808, true }, + { 153829, true }, + { 153849, true }, + { 153872, true }, + { 153888, true }, + { 153902, true }, + { 153918, true }, + { 153931, true }, + { 153952, true }, + { 153972, true }, + { 153985, true }, + { 153994, true }, + { 154028, true }, + { 154045, true }, + { 154056, true }, + { 154067, true }, + { 154079, true }, + { 154090, true }, + { 154109, true }, { 154121, true }, - { 154133, true }, - { 154147, true }, - { 154165, true }, - { 154179, true }, - { 154191, true }, - { 154206, true }, - { 154219, true }, + { 154134, true }, + { 154150, true }, + { 154169, true }, + { 154184, true }, + { 154198, true }, + { 154213, true }, { 154230, false }, - { 154247, true }, - { 154257, true }, - { 154278, true }, - { 154306, false }, - { 154317, true }, - { 154324, true }, - { 154335, true }, - { 154345, true }, - { 154359, true }, - { 154373, true }, - { 154384, false }, - { 154395, true }, - { 154403, false }, - { 154423, true }, - { 154438, true }, - { 154451, true }, - { 154467, true }, - { 154482, true }, - { 154495, true }, - { 154511, true }, - { 154524, true }, - { 154544, true }, - { 154557, true }, - { 154576, true }, - { 154594, true }, - { 154604, true }, - { 154618, true }, - { 154636, true }, - { 154656, true }, - { 154688, true }, - { 154703, true }, - { 154722, true }, - { 154735, true }, - { 154750, true }, - { 154765, true }, - { 154786, true }, - { 154807, true }, - { 154821, true }, - { 154843, true }, - { 154859, true }, - { 154884, true }, - { 154896, true }, - { 154907, true }, - { 154924, true }, - { 154948, true }, - { 154962, true }, - { 154975, true }, - { 154988, true }, - { 155000, true }, - { 155013, true }, - { 155031, true }, - { 155048, true }, - { 155073, true }, - { 155086, true }, - { 155098, true }, - { 155112, true }, - { 155126, true }, - { 155143, true }, + { 154245, true }, + { 154265, true }, + { 154276, true }, + { 154287, true }, + { 154307, false }, + { 154316, true }, + { 154325, true }, + { 154336, true }, + { 154348, true }, + { 154362, true }, + { 154380, true }, + { 154394, true }, + { 154406, true }, + { 154421, true }, + { 154434, true }, + { 154445, false }, + { 154462, true }, + { 154472, true }, + { 154493, true }, + { 154521, false }, + { 154532, true }, + { 154539, true }, + { 154550, true }, + { 154560, true }, + { 154574, true }, + { 154588, true }, + { 154599, false }, + { 154610, true }, + { 154618, false }, + { 154638, true }, + { 154653, true }, + { 154666, true }, + { 154682, true }, + { 154697, true }, + { 154710, true }, + { 154726, true }, + { 154739, true }, + { 154759, true }, + { 154772, true }, + { 154791, true }, + { 154809, true }, + { 154819, true }, + { 154833, true }, + { 154851, true }, + { 154871, true }, + { 154903, true }, + { 154918, true }, + { 154937, true }, + { 154950, true }, + { 154965, true }, + { 154980, true }, + { 155001, true }, + { 155022, true }, + { 155036, true }, + { 155058, true }, + { 155074, true }, + { 155099, true }, + { 155111, true }, + { 155122, true }, + { 155139, true }, { 155163, true }, - { 155179, true }, - { 155197, true }, - { 155208, true }, - { 155223, true }, - { 155236, true }, - { 155251, true }, - { 155259, false }, - { 155272, true }, - { 155284, true }, - { 155298, true }, - { 155307, true }, - { 155323, true }, - { 155345, true }, - { 155359, true }, - { 155369, true }, - { 155383, true }, - { 155391, true }, - { 155403, true }, - { 155414, true }, - { 155430, true }, - { 155440, true }, - { 155453, true }, + { 155177, true }, + { 155190, true }, + { 155203, true }, + { 155215, true }, + { 155228, true }, + { 155246, true }, + { 155263, true }, + { 155288, true }, + { 155301, true }, + { 155313, true }, + { 155327, true }, + { 155341, true }, + { 155358, true }, + { 155378, true }, + { 155394, true }, + { 155412, true }, + { 155423, true }, + { 155438, true }, + { 155451, true }, { 155466, true }, - { 155480, true }, - { 155496, true }, - { 155509, true }, - { 155523, true }, - { 155540, true }, - { 155551, true }, - { 155561, true }, - { 155581, true }, - { 155593, true }, - { 155607, true }, - { 155622, true }, - { 155634, true }, - { 155643, true }, - { 155651, true }, - { 155663, true }, - { 155674, true }, + { 155474, false }, + { 155487, true }, + { 155499, true }, + { 155513, true }, + { 155522, true }, + { 155538, true }, + { 155560, true }, + { 155574, true }, + { 155584, true }, + { 155598, true }, + { 155606, true }, + { 155618, true }, + { 155629, true }, + { 155645, true }, + { 155655, true }, + { 155668, true }, + { 155681, true }, { 155695, true }, - { 155714, true }, - { 155732, true }, - { 155750, true }, - { 155770, true }, - { 155779, true }, - { 155791, true }, - { 155809, true }, + { 155711, true }, + { 155724, true }, + { 155738, true }, + { 155755, true }, + { 155766, true }, + { 155776, true }, + { 155796, true }, + { 155808, true }, { 155822, true }, - { 155836, true }, - { 155855, true }, - { 155868, true }, - { 155880, true }, - { 155892, true }, - { 155903, true }, - { 155917, false }, - { 155932, true }, - { 155952, true }, - { 155969, true }, - { 155980, true }, - { 155991, true }, - { 156005, true }, - { 156026, true }, - { 156042, true }, - { 156061, true }, - { 156077, true }, + { 155837, true }, + { 155849, true }, + { 155858, true }, + { 155866, true }, + { 155878, true }, + { 155889, true }, + { 155910, true }, + { 155929, true }, + { 155947, true }, + { 155965, true }, + { 155985, true }, + { 155994, true }, + { 156006, true }, + { 156024, true }, + { 156037, true }, + { 156051, true }, + { 156070, true }, + { 156083, true }, { 156095, true }, - { 156111, true }, - { 156134, true }, - { 156150, true }, - { 156162, true }, - { 156171, true }, + { 156107, true }, + { 156118, true }, + { 156132, false }, + { 156147, true }, + { 156167, true }, { 156184, true }, - { 156202, true }, - { 156217, true }, - { 156232, true }, - { 156248, true }, - { 156263, true }, - { 156278, true }, - { 156293, true }, - { 156309, true }, - { 156324, true }, - { 156339, true }, - { 156355, true }, - { 156372, true }, - { 156382, true }, - { 156395, true }, - { 156408, true }, - { 156418, true }, - { 156439, true }, - { 156451, false }, - { 156462, true }, - { 156476, true }, - { 156488, true }, - { 156497, true }, - { 156512, false }, - { 156531, true }, - { 156548, true }, - { 156561, true }, - { 156576, true }, - { 156592, false }, - { 156605, false }, - { 156615, true }, - { 156628, true }, - { 156638, true }, - { 156648, false }, - { 156657, false }, - { 156665, false }, - { 156685, true }, - { 156698, true }, - { 156710, false }, - { 156722, true }, - { 156739, true }, - { 156753, true }, - { 156770, true }, - { 156786, true }, - { 156805, true }, - { 156821, true }, - { 156835, true }, - { 156849, true }, - { 156870, true }, - { 156884, true }, + { 156195, true }, + { 156206, true }, + { 156220, true }, + { 156241, true }, + { 156257, true }, + { 156276, true }, + { 156292, true }, + { 156310, true }, + { 156326, true }, + { 156349, true }, + { 156365, true }, + { 156377, true }, + { 156386, true }, + { 156399, true }, + { 156417, true }, + { 156432, true }, + { 156447, true }, + { 156463, true }, + { 156478, true }, + { 156493, true }, + { 156508, true }, + { 156524, true }, + { 156539, true }, + { 156554, true }, + { 156570, true }, + { 156587, true }, + { 156597, true }, + { 156610, true }, + { 156623, true }, + { 156633, true }, + { 156654, true }, + { 156666, false }, + { 156677, true }, + { 156691, true }, + { 156703, true }, + { 156712, true }, + { 156727, false }, + { 156746, true }, + { 156763, true }, + { 156776, true }, + { 156791, true }, + { 156807, false }, + { 156820, false }, + { 156830, true }, + { 156843, true }, + { 156853, true }, + { 156863, false }, + { 156872, false }, + { 156880, false }, { 156900, true }, { 156913, true }, - { 156927, true }, - { 156946, true }, + { 156925, false }, + { 156937, true }, + { 156954, true }, { 156968, true }, - { 156983, true }, - { 157000, true }, - { 157008, true }, + { 156985, true }, + { 157001, true }, { 157020, true }, - { 157033, true }, - { 157046, true }, - { 157059, false }, - { 157070, true }, - { 157081, true }, + { 157036, true }, + { 157050, true }, + { 157064, true }, + { 157085, true }, { 157099, true }, - { 157118, true }, - { 157134, true }, - { 157150, true }, - { 157159, false }, - { 157173, true }, - { 157191, true }, - { 157209, true }, - { 157226, true }, - { 157238, true }, - { 157249, false }, - { 157265, false }, - { 157289, true }, - { 157303, true }, - { 157330, true }, + { 157115, true }, + { 157128, true }, + { 157142, true }, + { 157161, true }, + { 157183, true }, + { 157198, true }, + { 157215, true }, + { 157223, true }, + { 157235, true }, + { 157248, true }, + { 157261, true }, + { 157274, false }, + { 157285, true }, + { 157296, true }, + { 157314, true }, + { 157333, true }, { 157349, true }, - { 157394, true }, - { 157439, true }, + { 157365, true }, + { 157374, false }, + { 157388, true }, + { 157406, true }, + { 157424, true }, + { 157441, true }, { 157453, true }, - { 157461, true }, - { 157470, true }, - { 157482, true }, - { 157494, true }, - { 157519, true }, - { 157536, true }, - { 157553, true }, - { 157568, true }, - { 157580, true }, - { 157593, true }, - { 157601, true }, - { 157619, true }, - { 157628, false }, - { 157636, true }, - { 157657, true }, - { 157670, true }, - { 157683, true }, - { 157695, true }, - { 157708, false }, - { 157721, true }, - { 157737, true }, + { 157464, false }, + { 157480, false }, + { 157504, true }, + { 157518, true }, + { 157545, true }, + { 157564, true }, + { 157609, true }, + { 157654, true }, + { 157668, true }, + { 157676, true }, + { 157685, true }, + { 157697, true }, + { 157709, true }, + { 157734, true }, { 157751, true }, - { 157769, true }, - { 157790, true }, - { 157802, true }, - { 157823, true }, - { 157842, true }, - { 157867, true }, - { 157879, true }, - { 157892, true }, - { 157905, true }, - { 157917, true }, - { 157929, true }, - { 157946, true }, - { 157963, true }, - { 157975, false }, + { 157768, true }, + { 157783, true }, + { 157795, true }, + { 157808, true }, + { 157816, true }, + { 157834, true }, + { 157843, false }, + { 157851, true }, + { 157872, true }, + { 157885, true }, + { 157898, true }, + { 157910, true }, + { 157923, false }, + { 157936, true }, + { 157952, true }, + { 157966, true }, { 157984, true }, - { 157999, true }, - { 158021, true }, - { 158040, true }, - { 158054, true }, - { 158067, true }, - { 158089, true }, - { 158104, true }, - { 158119, true }, - { 158130, true }, - { 158155, true }, - { 158172, true }, - { 158184, true }, - { 158200, false }, - { 158216, false }, - { 158231, true }, - { 158244, false }, - { 158268, true }, - { 158276, false }, - { 158289, true }, - { 158303, true }, - { 158315, true }, - { 158328, true }, - { 158341, true }, - { 158353, true }, - { 158369, true }, - { 158384, true }, - { 158403, true }, - { 158417, true }, - { 158431, true }, - { 158451, true }, - { 158467, true }, - { 158486, true }, - { 158506, true }, + { 158005, true }, + { 158017, true }, + { 158038, true }, + { 158057, true }, + { 158082, true }, + { 158094, true }, + { 158107, true }, + { 158120, true }, + { 158132, true }, + { 158144, true }, + { 158161, true }, + { 158178, true }, + { 158190, false }, + { 158199, true }, + { 158214, true }, + { 158236, true }, + { 158255, true }, + { 158269, true }, + { 158282, true }, + { 158304, true }, + { 158319, true }, + { 158334, true }, + { 158345, true }, + { 158370, true }, + { 158387, true }, + { 158399, true }, + { 158415, false }, + { 158431, false }, + { 158446, true }, + { 158459, false }, + { 158483, true }, + { 158491, false }, + { 158504, true }, { 158518, true }, - { 158541, true }, - { 158571, true }, - { 158583, true }, - { 158594, true }, - { 158604, true }, + { 158530, true }, + { 158543, true }, + { 158556, true }, + { 158568, true }, + { 158584, true }, + { 158599, true }, { 158618, true }, - { 158631, true }, - { 158649, false }, - { 158659, true }, - { 158673, true }, - { 158688, true }, - { 158706, true }, - { 158715, true }, - { 158728, false }, - { 158745, true }, - { 158761, true }, - { 158772, true }, - { 158783, true }, - { 158793, true }, - { 158802, true }, - { 158816, true }, - { 158837, true }, - { 158848, true }, - { 158870, true }, - { 158885, true }, - { 158900, true }, - { 158917, true }, - { 158939, true }, - { 158949, true }, - { 158971, true }, - { 158993, true }, - { 159010, true }, - { 159024, true }, - { 159037, true }, - { 159054, true }, - { 159079, true }, - { 159096, true }, - { 159112, true }, - { 159122, true }, - { 159133, true }, - { 159142, false }, - { 159151, true }, - { 159161, true }, - { 159175, true }, - { 159193, true }, - { 159213, true }, - { 159227, true }, - { 159236, true }, - { 159260, true }, - { 159281, true }, - { 159301, true }, - { 159319, true }, - { 159332, true }, - { 159349, true }, - { 159370, true }, - { 159388, true }, - { 159400, true }, - { 159422, false }, - { 159441, true }, - { 159452, true }, - { 159473, true }, - { 159484, true }, - { 159499, true }, - { 159511, true }, - { 159528, true }, - { 159554, true }, - { 159571, false }, + { 158632, true }, + { 158646, true }, + { 158666, true }, + { 158682, true }, + { 158701, true }, + { 158721, true }, + { 158733, true }, + { 158756, true }, + { 158786, true }, + { 158798, true }, + { 158809, true }, + { 158819, true }, + { 158833, true }, + { 158846, true }, + { 158864, false }, + { 158874, true }, + { 158889, true }, + { 158907, true }, + { 158916, true }, + { 158929, false }, + { 158946, true }, + { 158962, true }, + { 158973, true }, + { 158984, true }, + { 158994, true }, + { 159003, true }, + { 159017, true }, + { 159038, true }, + { 159049, true }, + { 159071, true }, + { 159086, true }, + { 159101, true }, + { 159118, true }, + { 159140, true }, + { 159150, true }, + { 159172, true }, + { 159194, true }, + { 159211, true }, + { 159225, true }, + { 159238, true }, + { 159255, true }, + { 159280, true }, + { 159297, true }, + { 159313, true }, + { 159323, true }, + { 159334, true }, + { 159343, false }, + { 159352, true }, + { 159362, true }, + { 159376, true }, + { 159394, true }, + { 159414, true }, + { 159428, true }, + { 159437, true }, + { 159461, true }, + { 159482, true }, + { 159502, true }, + { 159520, true }, + { 159533, true }, + { 159550, true }, + { 159571, true }, { 159589, true }, - { 159608, false }, - { 159627, true }, - { 159639, true }, - { 159659, true }, - { 159681, true }, - { 159694, true }, - { 159716, true }, + { 159601, true }, + { 159623, false }, + { 159642, true }, + { 159653, true }, + { 159674, true }, + { 159685, true }, + { 159700, true }, + { 159712, true }, { 159729, true }, - { 159752, true }, - { 159767, true }, - { 159781, true }, - { 159804, true }, - { 159814, true }, - { 159824, true }, - { 159843, true }, - { 159856, true }, - { 159878, true }, - { 159898, true }, - { 159908, true }, - { 159927, true }, - { 159939, true }, - { 159952, true }, - { 159965, true }, - { 159986, true }, - { 160012, true }, - { 160033, true }, - { 160054, true }, - { 160075, true }, - { 160095, true }, - { 160107, true }, - { 160127, true }, - { 160141, true }, + { 159755, true }, + { 159772, false }, + { 159790, true }, + { 159809, false }, + { 159828, true }, + { 159840, true }, + { 159860, true }, + { 159882, true }, + { 159895, true }, + { 159917, true }, + { 159930, true }, + { 159953, true }, + { 159968, true }, + { 159982, true }, + { 160005, true }, + { 160015, true }, + { 160025, true }, + { 160044, true }, + { 160057, true }, + { 160079, true }, + { 160099, true }, + { 160109, true }, + { 160128, true }, + { 160140, true }, { 160153, true }, - { 160162, true }, - { 160185, true }, - { 160201, true }, + { 160166, true }, + { 160187, true }, { 160213, true }, - { 160238, true }, - { 160253, true }, - { 160274, true }, - { 160291, true }, - { 160312, false }, - { 160329, false }, - { 160347, true }, - { 160357, true }, - { 160371, true }, - { 160385, true }, - { 160395, true }, - { 160407, true }, - { 160419, true }, - { 160429, true }, - { 160440, true }, + { 160234, true }, + { 160255, true }, + { 160276, true }, + { 160296, true }, + { 160308, true }, + { 160328, true }, + { 160342, true }, + { 160354, true }, + { 160363, true }, + { 160386, true }, + { 160402, true }, + { 160414, true }, + { 160439, true }, { 160454, true }, - { 160478, true }, - { 160490, true }, - { 160519, true }, - { 160534, true }, + { 160475, true }, + { 160492, true }, + { 160513, false }, + { 160530, false }, { 160548, true }, - { 160562, true }, - { 160578, true }, - { 160593, true }, - { 160607, true }, - { 160619, true }, - { 160639, true }, - { 160653, true }, - { 160666, true }, + { 160558, true }, + { 160572, true }, + { 160586, true }, + { 160596, true }, + { 160608, true }, + { 160620, true }, + { 160630, true }, + { 160641, true }, + { 160655, true }, { 160679, true }, { 160691, true }, - { 160709, true }, - { 160721, true }, - { 160740, true }, - { 160764, true }, - { 160787, true }, - { 160799, true }, - { 160817, true }, - { 160833, true }, - { 160853, false }, - { 160871, true }, - { 160891, true }, - { 160904, true }, - { 160924, true }, - { 160932, true }, - { 160942, true }, - { 160961, true }, - { 160980, true }, - { 160994, true }, - { 161012, true }, - { 161028, false }, - { 161047, true }, - { 161061, true }, - { 161070, true }, - { 161087, true }, - { 161103, true }, + { 160720, true }, + { 160735, true }, + { 160749, true }, + { 160763, true }, + { 160779, true }, + { 160794, true }, + { 160808, true }, + { 160820, true }, + { 160840, true }, + { 160854, true }, + { 160867, true }, + { 160880, true }, + { 160892, true }, + { 160910, true }, + { 160922, true }, + { 160941, true }, + { 160965, true }, + { 160988, true }, + { 161000, true }, + { 161018, true }, + { 161034, true }, + { 161054, false }, + { 161072, true }, + { 161092, true }, + { 161105, true }, { 161125, true }, - { 161142, true }, - { 161160, true }, - { 161179, true }, - { 161196, true }, - { 161209, true }, - { 161219, true }, - { 161227, true }, - { 161245, true }, - { 161273, true }, - { 161290, true }, + { 161133, true }, + { 161143, true }, + { 161162, true }, + { 161181, true }, + { 161195, true }, + { 161213, true }, + { 161229, false }, + { 161248, true }, + { 161262, true }, + { 161271, true }, + { 161288, true }, { 161304, true }, - { 161319, false }, - { 161332, true }, - { 161344, false }, - { 161354, false }, - { 161367, false }, - { 161382, true }, - { 161394, true }, - { 161406, true }, - { 161418, true }, - { 161430, true }, - { 161443, true }, - { 161455, true }, - { 161467, true }, - { 161483, true }, - { 161495, true }, - { 161508, true }, - { 161518, true }, - { 161528, true }, - { 161541, true }, - { 161556, true }, - { 161567, true }, - { 161578, true }, - { 161596, true }, - { 161604, true }, - { 161612, true }, - { 161624, true }, - { 161638, true }, + { 161326, true }, + { 161343, true }, + { 161361, true }, + { 161380, true }, + { 161397, true }, + { 161410, true }, + { 161420, true }, + { 161428, true }, + { 161446, true }, + { 161474, true }, + { 161491, true }, + { 161505, true }, + { 161520, false }, + { 161533, true }, + { 161545, false }, + { 161555, false }, + { 161568, false }, + { 161583, true }, + { 161595, true }, + { 161607, true }, + { 161619, true }, + { 161631, true }, + { 161644, true }, + { 161656, true }, { 161668, true }, - { 161683, true }, - { 161699, true }, - { 161714, true }, + { 161684, true }, + { 161696, true }, + { 161709, true }, + { 161719, true }, { 161729, true }, - { 161744, true }, - { 161752, true }, - { 161767, true }, - { 161778, true }, - { 161791, true }, - { 161799, false }, - { 161809, true }, + { 161742, true }, + { 161757, true }, + { 161768, true }, + { 161779, true }, + { 161797, true }, + { 161805, true }, + { 161813, true }, { 161825, true }, - { 161842, true }, - { 161859, true }, - { 161880, true }, - { 161893, true }, - { 161905, true }, - { 161913, true }, + { 161839, true }, + { 161869, true }, + { 161884, true }, + { 161900, true }, + { 161915, true }, { 161930, true }, - { 161946, true }, + { 161945, true }, { 161953, true }, - { 161964, true }, - { 161972, false }, - { 161996, true }, - { 162028, true }, - { 162055, true }, - { 162075, true }, - { 162099, true }, - { 162116, false }, - { 162129, true }, - { 162144, true }, - { 162155, true }, - { 162166, true }, - { 162176, true }, - { 162189, true }, + { 161968, true }, + { 161979, true }, + { 161992, true }, + { 162000, false }, + { 162010, true }, + { 162026, true }, + { 162043, true }, + { 162060, true }, + { 162081, true }, + { 162094, true }, + { 162106, true }, + { 162114, true }, + { 162131, true }, + { 162147, true }, + { 162154, true }, + { 162165, true }, + { 162173, false }, { 162197, true }, - { 162209, true }, - { 162221, false }, - { 162233, false }, - { 162241, false }, - { 162266, true }, - { 162279, true }, - { 162294, true }, - { 162308, true }, - { 162321, true }, - { 162333, true }, - { 162346, true }, - { 162363, true }, + { 162229, true }, + { 162256, true }, + { 162276, true }, + { 162300, true }, + { 162317, false }, + { 162330, true }, + { 162345, true }, + { 162356, true }, + { 162367, true }, { 162377, true }, - { 162394, true }, - { 162406, true }, - { 162420, true }, - { 162435, true }, - { 162450, true }, - { 162461, true }, - { 162468, true }, - { 162488, true }, - { 162502, true }, - { 162510, true }, - { 162518, false }, - { 162533, true }, - { 162545, true }, - { 162559, true }, - { 162572, true }, - { 162582, true }, - { 162592, true }, - { 162599, true }, - { 162612, true }, - { 162625, true }, - { 162633, true }, - { 162650, true }, - { 162658, true }, - { 162667, true }, - { 162683, true }, - { 162702, true }, - { 162713, true }, - { 162725, true }, - { 162735, true }, - { 162752, false }, - { 162763, true }, - { 162771, true }, - { 162781, true }, - { 162790, true }, - { 162806, true }, - { 162827, true }, - { 162852, false }, + { 162390, true }, + { 162398, true }, + { 162410, true }, + { 162422, false }, + { 162434, false }, + { 162442, false }, + { 162467, true }, + { 162480, true }, + { 162495, true }, + { 162509, true }, + { 162522, true }, + { 162534, true }, + { 162547, true }, + { 162564, true }, + { 162578, true }, + { 162595, true }, + { 162607, true }, + { 162621, true }, + { 162636, true }, + { 162651, true }, + { 162662, true }, + { 162669, true }, + { 162689, true }, + { 162703, true }, + { 162711, true }, + { 162719, false }, + { 162734, true }, + { 162746, true }, + { 162760, true }, + { 162773, true }, + { 162783, true }, + { 162793, true }, + { 162800, true }, + { 162813, true }, + { 162826, true }, + { 162834, true }, + { 162851, true }, + { 162859, true }, { 162868, true }, - { 162880, true }, - { 162892, true }, - { 162905, true }, - { 162913, true }, - { 162921, false }, - { 162941, false }, - { 162960, false }, - { 162979, false }, - { 162999, false }, - { 163019, false }, - { 163039, false }, - { 163058, false }, - { 163077, true }, - { 163096, true }, - { 163107, true }, - { 163117, true }, - { 163126, true }, - { 163139, true }, - { 163154, true }, - { 163164, true }, - { 163177, false }, - { 163188, true }, - { 163199, true }, - { 163208, true }, - { 163216, true }, - { 163229, true }, - { 163237, true }, - { 163247, true }, - { 163256, true }, - { 163271, true }, - { 163294, true }, - { 163313, false }, - { 163324, true }, - { 163346, true }, - { 163360, true }, - { 163369, true }, - { 163376, true }, - { 163385, true }, - { 163393, true }, + { 162884, true }, + { 162903, true }, + { 162914, true }, + { 162926, true }, + { 162936, true }, + { 162953, false }, + { 162964, true }, + { 162972, true }, + { 162982, true }, + { 162991, true }, + { 163007, true }, + { 163028, true }, + { 163053, false }, + { 163069, true }, + { 163081, true }, + { 163093, true }, + { 163106, true }, + { 163114, true }, + { 163122, false }, + { 163142, false }, + { 163161, false }, + { 163180, false }, + { 163200, false }, + { 163220, false }, + { 163240, false }, + { 163259, false }, + { 163278, true }, + { 163297, true }, + { 163308, true }, + { 163318, true }, + { 163327, true }, + { 163340, true }, + { 163355, true }, + { 163365, true }, + { 163378, false }, + { 163389, true }, { 163400, true }, - { 163412, true }, - { 163429, true }, - { 163436, true }, - { 163444, true }, - { 163455, true }, - { 163469, true }, - { 163481, true }, - { 163493, true }, - { 163502, true }, - { 163511, true }, - { 163523, false }, - { 163534, true }, + { 163409, true }, + { 163417, true }, + { 163430, true }, + { 163438, true }, + { 163448, true }, + { 163457, true }, + { 163472, true }, + { 163495, true }, + { 163514, false }, + { 163525, true }, { 163547, true }, - { 163573, true }, - { 163596, false }, - { 163616, true }, - { 163633, true }, - { 163648, true }, - { 163662, true }, - { 163681, true }, - { 163697, true }, - { 163710, true }, - { 163721, true }, - { 163736, true }, - { 163756, true }, - { 163771, true }, - { 163780, true }, - { 163798, true }, - { 163813, true }, + { 163561, true }, + { 163570, true }, + { 163577, true }, + { 163586, true }, + { 163594, true }, + { 163601, true }, + { 163613, true }, + { 163630, true }, + { 163637, true }, + { 163645, true }, + { 163656, true }, + { 163670, true }, + { 163682, true }, + { 163694, true }, + { 163703, true }, + { 163712, true }, + { 163724, false }, + { 163735, true }, + { 163748, true }, + { 163774, true }, + { 163797, false }, + { 163817, true }, { 163834, true }, - { 163854, true }, - { 163869, true }, - { 163884, true }, - { 163899, true }, - { 163913, true }, - { 163927, true }, - { 163936, true }, - { 163947, true }, - { 163962, true }, - { 163971, true }, - { 163989, true }, - { 164000, true }, - { 164010, true }, - { 164019, true }, - { 164030, true }, - { 164040, true }, - { 164049, true }, - { 164059, true }, - { 164072, true }, - { 164083, true }, - { 164093, true }, - { 164102, true }, - { 164118, true }, - { 164125, true }, - { 164136, true }, - { 164147, true }, - { 164161, true }, - { 164168, true }, - { 164179, true }, - { 164187, true }, - { 164205, true }, - { 164217, true }, - { 164225, true }, - { 164245, false }, - { 164261, true }, - { 164280, true }, + { 163849, true }, + { 163863, true }, + { 163882, true }, + { 163898, true }, + { 163911, true }, + { 163922, true }, + { 163937, true }, + { 163957, true }, + { 163972, true }, + { 163981, true }, + { 163999, true }, + { 164014, true }, + { 164035, true }, + { 164055, true }, + { 164070, true }, + { 164085, true }, + { 164100, true }, + { 164114, true }, + { 164128, true }, + { 164137, true }, + { 164148, true }, + { 164163, true }, + { 164172, true }, + { 164190, true }, + { 164201, true }, + { 164211, true }, + { 164220, true }, + { 164231, true }, + { 164241, true }, + { 164250, true }, + { 164260, true }, + { 164273, true }, + { 164284, true }, + { 164294, true }, { 164303, true }, - { 164322, true }, - { 164333, true }, - { 164355, true }, - { 164368, true }, - { 164377, true }, - { 164400, true }, - { 164434, true }, - { 164450, true }, - { 164466, true }, - { 164488, true }, - { 164501, true }, - { 164528, true }, - { 164542, true }, - { 164552, true }, - { 164570, true }, - { 164580, true }, - { 164599, true }, - { 164613, true }, - { 164627, true }, - { 164643, true }, - { 164654, true }, - { 164665, true }, - { 164688, true }, - { 164703, true }, - { 164726, true }, - { 164735, true }, + { 164319, true }, + { 164326, true }, + { 164337, true }, + { 164348, true }, + { 164362, true }, + { 164369, true }, + { 164380, true }, + { 164388, true }, + { 164406, true }, + { 164418, true }, + { 164426, true }, + { 164446, false }, + { 164462, true }, + { 164481, true }, + { 164504, true }, + { 164523, true }, + { 164534, true }, + { 164556, true }, + { 164569, true }, + { 164578, true }, + { 164601, true }, + { 164635, true }, + { 164651, true }, + { 164667, true }, + { 164689, true }, + { 164702, true }, + { 164729, true }, + { 164743, true }, { 164753, true }, - { 164770, true }, - { 164780, true }, - { 164805, true }, - { 164823, true }, - { 164838, true }, - { 164848, true }, - { 164860, true }, - { 164873, true }, - { 164884, false }, - { 164896, true }, - { 164913, true }, - { 164923, true }, - { 164944, true }, - { 164966, true }, - { 164984, true }, + { 164771, true }, + { 164781, true }, + { 164800, true }, + { 164814, true }, + { 164828, true }, + { 164844, true }, + { 164855, true }, + { 164878, true }, + { 164893, true }, + { 164916, true }, + { 164925, true }, + { 164943, true }, + { 164960, true }, + { 164970, true }, { 164995, true }, - { 165008, true }, - { 165019, true }, - { 165033, true }, - { 165046, true }, - { 165057, true }, - { 165071, true }, + { 165013, true }, + { 165028, true }, + { 165038, true }, + { 165050, true }, + { 165063, true }, + { 165074, false }, { 165086, true }, - { 165096, true }, - { 165109, true }, - { 165118, true }, - { 165131, true }, - { 165147, false }, - { 165160, false }, - { 165173, false }, + { 165103, true }, + { 165113, true }, + { 165134, true }, + { 165156, true }, + { 165174, true }, { 165185, true }, - { 165202, true }, - { 165213, true }, - { 165228, true }, - { 165238, true }, - { 165250, true }, - { 165264, true }, - { 165277, true }, - { 165295, true }, - { 165304, true }, - { 165315, true }, - { 165326, true }, - { 165338, true }, - { 165351, true }, - { 165363, true }, - { 165372, true }, - { 165383, true }, - { 165400, true }, - { 165416, true }, - { 165428, true }, - { 165440, true }, - { 165452, true }, - { 165469, true }, - { 165481, true }, - { 165491, true }, - { 165504, true }, - { 165521, true }, - { 165535, true }, - { 165550, true }, - { 165562, true }, - { 165569, true }, - { 165585, true }, + { 165198, true }, + { 165209, true }, + { 165223, true }, + { 165236, true }, + { 165247, true }, + { 165261, true }, + { 165276, true }, + { 165286, true }, + { 165297, true }, + { 165310, true }, + { 165319, true }, + { 165332, true }, + { 165348, false }, + { 165361, false }, + { 165374, false }, + { 165386, true }, + { 165403, true }, + { 165414, true }, + { 165429, true }, + { 165439, true }, + { 165451, true }, + { 165465, true }, + { 165478, true }, + { 165496, true }, + { 165505, true }, + { 165516, true }, + { 165527, true }, + { 165539, true }, + { 165552, true }, + { 165564, true }, + { 165573, true }, + { 165584, true }, { 165601, true }, - { 165610, true }, { 165617, true }, - { 165634, true }, - { 165647, true }, - { 165662, true }, - { 165672, true }, - { 165683, true }, - { 165706, true }, - { 165718, false }, - { 165732, true }, - { 165748, true }, - { 165766, true }, - { 165783, true }, - { 165794, true }, - { 165810, false }, - { 165829, true }, - { 165844, true }, + { 165629, true }, + { 165641, true }, + { 165653, true }, + { 165670, true }, + { 165682, true }, + { 165692, true }, + { 165705, true }, + { 165722, true }, + { 165736, true }, + { 165751, true }, + { 165763, true }, + { 165770, true }, + { 165786, true }, + { 165802, true }, + { 165811, true }, + { 165818, true }, + { 165835, true }, + { 165848, true }, { 165863, true }, - { 165874, true }, - { 165895, true }, - { 165911, true }, - { 165923, true }, - { 165937, true }, - { 165951, true }, - { 165962, true }, - { 165983, true }, - { 165996, true }, - { 166006, true }, - { 166017, true }, - { 166034, true }, - { 166049, true }, - { 166069, true }, - { 166084, true }, - { 166103, false }, - { 166120, true }, - { 166136, true }, - { 166148, true }, - { 166171, true }, - { 166186, true }, + { 165873, true }, + { 165884, true }, + { 165907, true }, + { 165919, false }, + { 165933, true }, + { 165949, true }, + { 165967, true }, + { 165984, true }, + { 165995, true }, + { 166011, false }, + { 166030, true }, + { 166045, true }, + { 166064, true }, + { 166075, true }, + { 166096, true }, + { 166112, true }, + { 166124, true }, + { 166138, true }, + { 166152, true }, + { 166163, true }, + { 166184, true }, { 166197, true }, - { 166205, true }, - { 166228, true }, - { 166240, true }, - { 166248, true }, - { 166274, true }, - { 166292, true }, - { 166305, true }, - { 166322, true }, - { 166334, true }, - { 166361, true }, - { 166392, true }, - { 166403, true }, - { 166413, true }, - { 166428, true }, - { 166439, true }, - { 166450, true }, - { 166466, true }, - { 166478, true }, - { 166487, true }, - { 166500, true }, - { 166528, true }, - { 166549, true }, - { 166563, true }, - { 166585, true }, - { 166602, true }, - { 166612, true }, - { 166624, true }, + { 166207, true }, + { 166218, true }, + { 166235, true }, + { 166250, true }, + { 166270, true }, + { 166285, true }, + { 166304, false }, + { 166321, true }, + { 166337, true }, + { 166349, true }, + { 166372, true }, + { 166387, true }, + { 166398, true }, + { 166406, true }, + { 166429, true }, + { 166441, true }, + { 166449, true }, + { 166475, true }, + { 166493, true }, + { 166506, true }, + { 166523, true }, + { 166535, true }, + { 166562, true }, + { 166593, true }, + { 166604, true }, + { 166614, true }, + { 166629, true }, { 166640, true }, - { 166654, true }, - { 166665, true }, + { 166651, true }, + { 166667, true }, { 166679, true }, - { 166697, true }, - { 166714, true }, - { 166734, true }, - { 166745, true }, - { 166756, false }, - { 166763, true }, - { 166773, true }, - { 166800, true }, - { 166820, true }, - { 166838, true }, - { 166853, false }, - { 166864, true }, + { 166688, true }, + { 166701, true }, + { 166729, true }, + { 166750, true }, + { 166764, true }, + { 166786, true }, + { 166803, true }, + { 166813, true }, + { 166825, true }, + { 166841, true }, + { 166855, true }, + { 166866, true }, { 166880, true }, - { 166897, true }, - { 166914, true }, - { 166936, true }, - { 166950, true }, - { 166966, false }, - { 166983, true }, - { 166999, true }, - { 167009, true }, - { 167027, true }, - { 167048, true }, - { 167066, true }, - { 167073, true }, - { 167091, true }, - { 167109, true }, - { 167123, true }, - { 167133, true }, - { 167144, true }, - { 167166, true }, - { 167182, true }, - { 167199, true }, - { 167219, true }, - { 167230, true }, + { 166898, true }, + { 166915, true }, + { 166935, true }, + { 166946, true }, + { 166957, false }, + { 166964, true }, + { 166974, true }, + { 167001, true }, + { 167021, true }, + { 167039, true }, + { 167054, false }, + { 167065, true }, + { 167081, true }, + { 167098, true }, + { 167115, true }, + { 167137, true }, + { 167151, true }, + { 167167, false }, + { 167184, true }, + { 167200, true }, + { 167210, true }, + { 167228, true }, { 167249, true }, - { 167263, true }, - { 167280, true }, + { 167267, true }, + { 167274, true }, { 167292, true }, - { 167309, true }, - { 167330, true }, - { 167346, true }, - { 167358, true }, - { 167381, true }, - { 167399, true }, - { 167410, true }, + { 167310, true }, + { 167324, true }, + { 167334, true }, + { 167345, true }, + { 167367, true }, + { 167383, true }, + { 167400, true }, { 167420, true }, - { 167436, true }, - { 167447, true }, - { 167459, false }, - { 167479, true }, - { 167498, true }, - { 167511, true }, - { 167521, true }, - { 167538, true }, - { 167558, true }, - { 167572, true }, - { 167587, true }, - { 167601, true }, - { 167615, true }, - { 167633, true }, - { 167647, true }, - { 167662, true }, - { 167683, true }, - { 167694, true }, - { 167708, true }, - { 167724, false }, - { 167738, true }, - { 167754, true }, - { 167771, true }, - { 167787, true }, - { 167807, true }, - { 167830, true }, - { 167839, false }, - { 167847, true }, - { 167857, true }, - { 167869, false }, - { 167891, true }, - { 167906, true }, - { 167920, true }, - { 167934, true }, - { 167947, true }, - { 167975, true }, - { 167987, true }, - { 168002, true }, - { 168027, true }, - { 168041, true }, - { 168062, true }, - { 168073, true }, - { 168083, true }, - { 168091, true }, - { 168103, true }, - { 168128, true }, - { 168138, true }, - { 168163, true }, - { 168173, true }, - { 168186, false }, - { 168211, true }, - { 168225, true }, + { 167431, true }, + { 167450, true }, + { 167464, true }, + { 167481, true }, + { 167493, true }, + { 167510, true }, + { 167531, true }, + { 167547, true }, + { 167559, true }, + { 167582, true }, + { 167600, true }, + { 167611, true }, + { 167621, true }, + { 167637, true }, + { 167648, true }, + { 167660, false }, + { 167680, true }, + { 167699, true }, + { 167712, true }, + { 167722, true }, + { 167739, true }, + { 167759, true }, + { 167773, true }, + { 167788, true }, + { 167802, true }, + { 167816, true }, + { 167834, true }, + { 167848, true }, + { 167863, true }, + { 167884, true }, + { 167895, true }, + { 167909, true }, + { 167925, false }, + { 167939, true }, + { 167955, true }, + { 167972, true }, + { 167988, true }, + { 168008, true }, + { 168031, true }, + { 168040, false }, + { 168048, true }, + { 168058, true }, + { 168070, false }, + { 168092, true }, + { 168107, true }, + { 168121, true }, + { 168135, true }, + { 168148, true }, + { 168176, true }, + { 168188, true }, + { 168203, true }, + { 168228, true }, { 168242, true }, - { 168255, true }, { 168263, true }, - { 168272, true }, - { 168286, true }, - { 168299, true }, - { 168315, true }, - { 168325, true }, - { 168336, true }, - { 168352, true }, - { 168362, false }, + { 168274, true }, + { 168284, true }, + { 168292, true }, + { 168304, true }, + { 168329, true }, + { 168339, true }, + { 168364, true }, { 168374, true }, - { 168386, true }, - { 168404, true }, - { 168416, true }, + { 168387, false }, + { 168412, true }, { 168426, true }, - { 168442, true }, - { 168466, true }, - { 168479, true }, - { 168486, true }, - { 168503, true }, - { 168517, true }, - { 168529, true }, - { 168541, true }, - { 168553, true }, - { 168563, true }, - { 168577, true }, + { 168443, true }, + { 168456, true }, + { 168464, true }, + { 168473, true }, + { 168487, true }, + { 168500, true }, + { 168516, true }, + { 168526, true }, + { 168537, true }, + { 168548, true }, + { 168564, true }, + { 168574, false }, { 168586, true }, - { 168607, true }, - { 168620, true }, - { 168637, true }, - { 168652, true }, - { 168677, true }, - { 168703, true }, - { 168718, true }, + { 168598, true }, + { 168616, true }, + { 168628, true }, + { 168638, true }, + { 168654, true }, + { 168678, true }, + { 168691, true }, + { 168698, true }, + { 168715, true }, { 168729, true }, - { 168738, true }, - { 168760, true }, - { 168769, true }, - { 168784, true }, - { 168794, true }, - { 168810, true }, - { 168823, true }, - { 168840, true }, - { 168861, true }, - { 168882, true }, - { 168899, true }, - { 168918, true }, + { 168741, true }, + { 168753, true }, + { 168765, true }, + { 168775, true }, + { 168789, true }, + { 168798, true }, + { 168819, true }, + { 168832, true }, + { 168849, true }, + { 168864, true }, + { 168889, true }, + { 168915, true }, { 168930, true }, - { 168944, true }, - { 168959, true }, - { 168975, true }, - { 168989, true }, - { 169001, true }, - { 169015, true }, - { 169027, true }, - { 169046, true }, - { 169062, true }, - { 169078, true }, + { 168941, true }, + { 168950, true }, + { 168972, true }, + { 168981, true }, + { 168996, true }, + { 169006, true }, + { 169022, true }, + { 169035, true }, + { 169052, true }, + { 169073, true }, { 169094, true }, - { 169112, true }, - { 169122, true }, - { 169139, true }, + { 169111, true }, + { 169130, true }, + { 169142, true }, { 169156, true }, - { 169174, true }, - { 169189, true }, - { 169203, true }, - { 169221, true }, - { 169238, true }, - { 169251, true }, - { 169270, true }, + { 169171, true }, + { 169187, true }, + { 169201, true }, + { 169213, true }, + { 169227, true }, + { 169239, true }, + { 169258, true }, + { 169274, true }, { 169290, true }, - { 169307, true }, - { 169323, true }, - { 169341, true }, - { 169354, false }, - { 169371, false }, - { 169392, true }, - { 169409, true }, - { 169419, true }, - { 169438, true }, - { 169452, true }, - { 169465, true }, - { 169476, true }, - { 169491, true }, - { 169504, true }, - { 169515, true }, - { 169533, true }, - { 169545, true }, - { 169558, true }, - { 169582, true }, - { 169591, true }, - { 169606, true }, - { 169630, true }, - { 169657, true }, - { 169675, true }, - { 169685, true }, - { 169694, true }, - { 169704, true }, - { 169715, true }, - { 169738, true }, - { 169751, true }, - { 169759, true }, - { 169766, true }, - { 169785, true }, - { 169792, true }, - { 169807, true }, - { 169816, true }, - { 169828, false }, - { 169848, true }, - { 169858, true }, - { 169875, true }, - { 169893, true }, - { 169910, true }, - { 169932, false }, - { 169945, true }, - { 169964, true }, - { 169976, true }, - { 169987, true }, - { 170000, true }, + { 169306, true }, + { 169324, true }, + { 169334, true }, + { 169351, true }, + { 169368, true }, + { 169386, true }, + { 169401, true }, + { 169415, true }, + { 169433, true }, + { 169450, true }, + { 169463, true }, + { 169482, true }, + { 169502, true }, + { 169519, true }, + { 169535, true }, + { 169553, true }, + { 169566, false }, + { 169583, false }, + { 169604, true }, + { 169621, true }, + { 169631, true }, + { 169650, true }, + { 169664, true }, + { 169677, true }, + { 169688, true }, + { 169703, true }, + { 169716, true }, + { 169727, true }, + { 169745, true }, + { 169757, true }, + { 169770, true }, + { 169794, true }, + { 169803, true }, + { 169818, true }, + { 169842, true }, + { 169869, true }, + { 169887, true }, + { 169897, true }, + { 169906, true }, + { 169916, true }, + { 169927, true }, + { 169950, true }, + { 169963, true }, + { 169971, true }, + { 169978, true }, + { 169997, true }, + { 170004, true }, { 170019, true }, - { 170034, true }, - { 170050, true }, - { 170073, true }, - { 170093, true }, - { 170106, true }, - { 170120, true }, - { 170134, true }, - { 170145, true }, - { 170156, true }, - { 170166, true }, - { 170185, true }, - { 170202, true }, - { 170214, true }, + { 170028, true }, + { 170040, false }, + { 170060, true }, + { 170070, true }, + { 170087, true }, + { 170105, true }, + { 170122, true }, + { 170144, false }, + { 170157, true }, + { 170176, true }, + { 170188, true }, + { 170199, true }, + { 170212, true }, { 170231, true }, - { 170242, true }, - { 170266, true }, - { 170276, true }, - { 170288, true }, - { 170298, true }, - { 170308, true }, - { 170324, true }, - { 170355, true }, - { 170364, true }, + { 170246, true }, + { 170262, true }, + { 170285, true }, + { 170305, true }, + { 170318, true }, + { 170332, true }, + { 170346, true }, + { 170357, true }, + { 170368, true }, { 170378, true }, - { 170395, true }, - { 170412, true }, - { 170424, true }, - { 170440, true }, - { 170457, true }, - { 170470, true }, - { 170483, true }, - { 170493, true }, - { 170507, true }, - { 170521, true }, - { 170530, true }, - { 170540, true }, - { 170555, true }, - { 170565, true }, - { 170581, true }, - { 170596, true }, - { 170613, true }, - { 170626, true }, + { 170397, true }, + { 170409, true }, + { 170426, true }, + { 170438, true }, + { 170455, true }, + { 170466, true }, + { 170490, true }, + { 170500, true }, + { 170512, true }, + { 170522, true }, + { 170532, true }, + { 170548, true }, + { 170579, true }, + { 170588, true }, + { 170602, true }, + { 170619, true }, { 170636, true }, - { 170654, true }, - { 170671, true }, - { 170687, true }, - { 170704, true }, - { 170726, true }, - { 170738, true }, - { 170756, true }, - { 170770, true }, - { 170783, true }, - { 170796, true }, - { 170808, true }, - { 170815, true }, - { 170827, true }, + { 170648, true }, + { 170664, true }, + { 170681, true }, + { 170694, true }, + { 170707, true }, + { 170717, true }, + { 170731, true }, + { 170745, true }, + { 170754, true }, + { 170764, true }, + { 170779, true }, + { 170789, true }, + { 170805, true }, + { 170820, true }, { 170837, true }, - { 170849, true }, + { 170850, true }, { 170860, true }, - { 170872, true }, - { 170891, true }, - { 170917, true }, - { 170926, true }, - { 170941, true }, - { 170955, true }, - { 170971, true }, - { 170986, true }, - { 171008, true }, - { 171033, true }, - { 171049, true }, - { 171067, true }, - { 171081, true }, - { 171091, true }, - { 171102, true }, - { 171117, true }, - { 171127, true }, - { 171139, true }, - { 171157, true }, - { 171173, true }, - { 171188, true }, - { 171203, false }, - { 171226, true }, - { 171242, true }, - { 171255, true }, - { 171266, true }, - { 171276, true }, - { 171293, true }, - { 171313, true }, - { 171325, true }, - { 171356, true }, - { 171377, true }, - { 171402, true }, - { 171423, true }, - { 171434, true }, - { 171451, true }, - { 171463, true }, - { 171476, true }, - { 171496, true }, - { 171504, true }, - { 171515, true }, - { 171524, true }, - { 171533, true }, - { 171540, true }, - { 171548, true }, - { 171562, true }, - { 171574, false }, - { 171581, true }, - { 171589, false }, - { 171598, true }, - { 171607, true }, - { 171618, true }, - { 171625, true }, - { 171642, true }, - { 171651, true }, - { 171659, true }, - { 171673, true }, - { 171681, true }, - { 171700, false }, + { 170878, true }, + { 170895, true }, + { 170911, true }, + { 170928, true }, + { 170950, true }, + { 170962, true }, + { 170980, true }, + { 170994, true }, + { 171007, true }, + { 171020, true }, + { 171032, true }, + { 171039, true }, + { 171051, true }, + { 171061, true }, + { 171073, true }, + { 171084, true }, + { 171096, true }, + { 171115, true }, + { 171141, true }, + { 171150, true }, + { 171165, true }, + { 171179, true }, + { 171195, true }, + { 171210, true }, + { 171232, true }, + { 171257, true }, + { 171273, true }, + { 171291, true }, + { 171305, true }, + { 171315, true }, + { 171326, true }, + { 171341, true }, + { 171351, true }, + { 171363, true }, + { 171381, true }, + { 171397, true }, + { 171412, true }, + { 171427, false }, + { 171450, true }, + { 171466, true }, + { 171479, true }, + { 171490, true }, + { 171500, true }, + { 171517, true }, + { 171537, true }, + { 171549, true }, + { 171580, true }, + { 171601, true }, + { 171626, true }, + { 171647, true }, + { 171658, true }, + { 171675, true }, + { 171687, true }, + { 171700, true }, { 171720, true }, - { 171730, true }, - { 171751, true }, - { 171762, false }, - { 171774, true }, - { 171788, true }, - { 171805, true }, - { 171822, true }, - { 171833, true }, - { 171862, true }, - { 171876, true }, - { 171888, true }, - { 171902, true }, - { 171919, true }, - { 171931, true }, + { 171728, true }, + { 171739, true }, + { 171748, true }, + { 171757, true }, + { 171764, true }, + { 171778, true }, + { 171790, false }, + { 171797, true }, + { 171805, false }, + { 171814, true }, + { 171823, true }, + { 171834, true }, + { 171841, true }, + { 171858, true }, + { 171867, true }, + { 171875, true }, + { 171889, true }, + { 171897, true }, + { 171916, false }, + { 171936, true }, { 171946, true }, - { 171960, true }, - { 171968, true }, - { 171976, true }, - { 171988, true }, - { 172002, true }, - { 172019, true }, - { 172037, true }, - { 172050, true }, - { 172060, true }, - { 172069, false }, - { 172087, true }, - { 172099, false }, - { 172111, true }, - { 172124, true }, - { 172139, true }, - { 172153, true }, + { 171967, true }, + { 171978, false }, + { 171990, true }, + { 172004, true }, + { 172021, true }, + { 172038, true }, + { 172049, true }, + { 172078, true }, + { 172092, true }, + { 172104, true }, + { 172118, true }, + { 172135, true }, + { 172147, true }, { 172162, true }, - { 172185, true }, - { 172199, true }, - { 172212, true }, - { 172228, true }, - { 172245, true }, - { 172258, true }, + { 172176, true }, + { 172184, true }, + { 172192, true }, + { 172204, true }, + { 172218, true }, + { 172235, true }, + { 172253, true }, + { 172266, true }, { 172276, true }, - { 172288, true }, - { 172307, true }, - { 172329, true }, - { 172351, true }, - { 172371, true }, - { 172389, false }, - { 172405, true }, + { 172285, false }, + { 172303, true }, + { 172315, false }, + { 172327, true }, + { 172340, true }, + { 172355, true }, + { 172369, true }, + { 172378, true }, + { 172401, true }, + { 172415, true }, { 172428, true }, - { 172437, true }, - { 172445, true }, - { 172460, true }, - { 172479, true }, - { 172495, true }, - { 172509, true }, - { 172525, true }, + { 172444, true }, + { 172461, true }, + { 172474, true }, + { 172492, true }, + { 172504, true }, + { 172523, true }, { 172545, true }, - { 172555, true }, - { 172573, true }, - { 172580, true }, - { 172592, true }, - { 172605, true }, - { 172615, true }, - { 172631, true }, - { 172639, true }, - { 172647, true }, - { 172654, false }, - { 172677, true }, - { 172696, true }, - { 172721, true }, - { 172738, true }, - { 172750, true }, - { 172762, true }, - { 172772, true }, - { 172783, true }, - { 172798, true }, - { 172807, true }, + { 172567, true }, + { 172587, true }, + { 172605, false }, + { 172621, true }, + { 172644, true }, + { 172653, true }, + { 172661, true }, + { 172676, true }, + { 172695, true }, + { 172711, true }, + { 172725, true }, + { 172741, true }, + { 172761, true }, + { 172771, true }, + { 172789, true }, + { 172796, true }, + { 172808, true }, { 172821, true }, - { 172832, true }, - { 172845, true }, - { 172867, true }, - { 172879, true }, - { 172889, true }, - { 172910, true }, - { 172931, true }, - { 172948, true }, - { 172969, true }, - { 172983, true }, - { 172999, true }, - { 173012, true }, - { 173024, true }, - { 173039, true }, - { 173049, true }, - { 173062, true }, - { 173086, true }, - { 173105, true }, - { 173117, true }, - { 173135, true }, - { 173144, false }, - { 173161, true }, - { 173179, true }, - { 173192, true }, - { 173205, false }, - { 173226, true }, + { 172831, true }, + { 172847, true }, + { 172855, true }, + { 172863, true }, + { 172871, true }, + { 172878, false }, + { 172901, true }, + { 172920, true }, + { 172945, true }, + { 172962, true }, + { 172974, true }, + { 172986, true }, + { 172996, true }, + { 173007, true }, + { 173022, true }, + { 173031, true }, + { 173045, true }, + { 173056, true }, + { 173069, true }, + { 173091, true }, + { 173103, true }, + { 173113, true }, + { 173134, true }, + { 173155, true }, + { 173172, true }, + { 173193, true }, + { 173207, true }, + { 173223, true }, { 173236, true }, - { 173255, true }, - { 173268, true }, - { 173288, true }, - { 173313, true }, - { 173324, true }, - { 173336, true }, - { 173351, true }, - { 173364, true }, - { 173379, true }, - { 173394, true }, - { 173414, true }, - { 173427, false }, - { 173436, true }, - { 173455, true }, - { 173472, false }, - { 173487, true }, - { 173501, true }, - { 173511, true }, - { 173524, true }, - { 173540, true }, - { 173556, true }, - { 173574, true }, - { 173584, true }, - { 173597, true }, - { 173609, true }, - { 173622, true }, - { 173635, true }, - { 173644, true }, - { 173668, true }, - { 173692, true }, - { 173709, false }, - { 173722, true }, - { 173733, true }, - { 173749, true }, - { 173761, true }, - { 173777, true }, - { 173794, false }, - { 173806, true }, - { 173823, true }, - { 173842, false }, - { 173851, true }, - { 173873, true }, - { 173886, false }, - { 173901, true }, + { 173248, true }, + { 173263, true }, + { 173273, true }, + { 173286, true }, + { 173310, true }, + { 173329, true }, + { 173341, true }, + { 173359, true }, + { 173368, false }, + { 173385, true }, + { 173403, true }, + { 173416, true }, + { 173429, false }, + { 173450, true }, + { 173460, true }, + { 173479, true }, + { 173492, true }, + { 173512, true }, + { 173537, true }, + { 173548, true }, + { 173560, true }, + { 173575, true }, + { 173588, true }, + { 173603, true }, + { 173618, true }, + { 173638, true }, + { 173651, false }, + { 173660, true }, + { 173679, true }, + { 173696, false }, + { 173711, true }, + { 173725, true }, + { 173735, true }, + { 173748, true }, + { 173764, true }, + { 173780, true }, + { 173798, true }, + { 173808, true }, + { 173821, true }, + { 173833, true }, + { 173846, true }, + { 173859, true }, + { 173868, true }, + { 173892, true }, { 173916, true }, - { 173928, true }, - { 173947, false }, - { 173970, true }, - { 173986, true }, - { 174002, true }, - { 174020, true }, - { 174038, false }, - { 174058, true }, - { 174070, true }, - { 174083, true }, - { 174099, true }, - { 174110, true }, - { 174129, true }, - { 174143, true }, - { 174154, true }, - { 174164, true }, - { 174181, true }, - { 174193, true }, - { 174205, true }, - { 174224, true }, - { 174236, true }, - { 174247, true }, - { 174266, true }, - { 174287, true }, - { 174297, true }, - { 174310, true }, - { 174318, true }, + { 173933, false }, + { 173946, true }, + { 173957, true }, + { 173973, true }, + { 173985, true }, + { 174001, true }, + { 174018, false }, + { 174030, true }, + { 174047, true }, + { 174066, false }, + { 174075, true }, + { 174097, true }, + { 174110, false }, + { 174125, true }, + { 174140, true }, + { 174152, true }, + { 174171, false }, + { 174194, true }, + { 174210, true }, + { 174226, true }, + { 174244, true }, + { 174262, false }, + { 174282, true }, + { 174294, true }, + { 174307, true }, + { 174323, true }, { 174334, true }, - { 174358, false }, - { 174376, true }, - { 174394, false }, - { 174414, true }, - { 174430, true }, + { 174353, true }, + { 174367, true }, + { 174378, true }, + { 174388, true }, + { 174405, true }, + { 174417, true }, + { 174429, true }, { 174448, true }, - { 174465, true }, - { 174488, true }, - { 174507, true }, - { 174527, true }, - { 174540, true }, - { 174552, true }, - { 174560, true }, - { 174580, true }, - { 174596, true }, - { 174610, true }, - { 174622, true }, - { 174631, true }, - { 174640, true }, - { 174657, true }, - { 174667, true }, - { 174680, true }, - { 174697, true }, - { 174708, true }, - { 174718, true }, - { 174735, true }, - { 174752, true }, - { 174761, true }, - { 174775, true }, - { 174787, true }, - { 174806, true }, - { 174816, true }, - { 174833, true }, + { 174460, true }, + { 174471, true }, + { 174490, true }, + { 174511, true }, + { 174521, true }, + { 174534, true }, + { 174542, true }, + { 174558, true }, + { 174582, false }, + { 174600, true }, + { 174618, false }, + { 174638, true }, + { 174654, true }, + { 174672, true }, + { 174689, true }, + { 174712, true }, + { 174731, true }, + { 174751, true }, + { 174764, true }, + { 174776, true }, + { 174784, true }, + { 174804, true }, + { 174820, true }, + { 174834, true }, + { 174846, true }, { 174855, true }, - { 174869, true }, - { 174883, true }, - { 174901, true }, - { 174916, true }, - { 174930, true }, - { 174939, true }, - { 174951, true }, - { 174957, true }, - { 174963, true }, - { 174971, true }, - { 174983, true }, - { 175004, true }, - { 175014, true }, - { 175025, true }, - { 175043, true }, - { 175056, true }, - { 175075, true }, - { 175091, true }, - { 175104, true }, - { 175115, true }, - { 175128, true }, - { 175142, false }, - { 175156, true }, + { 174864, true }, + { 174881, true }, + { 174891, true }, + { 174904, true }, + { 174921, true }, + { 174932, true }, + { 174942, true }, + { 174959, true }, + { 174976, true }, + { 174985, true }, + { 174999, true }, + { 175011, true }, + { 175030, true }, + { 175040, true }, + { 175057, true }, + { 175079, true }, + { 175093, true }, + { 175107, true }, + { 175125, true }, + { 175140, true }, + { 175154, true }, + { 175163, true }, { 175175, true }, - { 175186, true }, - { 175196, true }, - { 175204, true }, - { 175221, true }, - { 175235, true }, - { 175247, true }, - { 175264, true }, - { 175278, true }, - { 175292, false }, - { 175305, true }, - { 175323, true }, - { 175335, true }, - { 175347, true }, - { 175366, true }, - { 175385, true }, - { 175398, true }, - { 175412, true }, - { 175424, true }, - { 175437, true }, - { 175453, true }, - { 175466, true }, - { 175479, true }, - { 175494, true }, - { 175522, true }, - { 175533, true }, + { 175181, true }, + { 175187, true }, + { 175195, true }, + { 175207, true }, + { 175228, true }, + { 175238, true }, + { 175249, true }, + { 175267, true }, + { 175280, true }, + { 175299, true }, + { 175315, true }, + { 175326, true }, + { 175339, true }, + { 175353, false }, + { 175367, true }, + { 175386, true }, + { 175397, true }, + { 175407, true }, + { 175415, true }, + { 175432, true }, + { 175446, true }, + { 175458, true }, + { 175475, true }, + { 175489, true }, + { 175503, false }, + { 175516, true }, + { 175534, true }, { 175546, true }, - { 175561, true }, - { 175580, true }, - { 175593, true }, - { 175618, true }, - { 175630, true }, - { 175644, true }, - { 175658, true }, - { 175674, true }, - { 175697, true }, - { 175713, true }, - { 175728, true }, - { 175752, true }, - { 175764, true }, - { 175783, true }, - { 175796, true }, - { 175807, true }, - { 175827, true }, - { 175839, true }, - { 175857, true }, - { 175874, true }, - { 175889, true }, + { 175558, true }, + { 175577, true }, + { 175596, true }, + { 175609, true }, + { 175623, true }, + { 175635, true }, + { 175648, true }, + { 175664, true }, + { 175677, true }, + { 175690, true }, + { 175705, true }, + { 175733, true }, + { 175744, true }, + { 175757, true }, + { 175772, true }, + { 175791, true }, + { 175804, true }, + { 175829, true }, + { 175841, true }, + { 175855, true }, + { 175869, true }, + { 175885, true }, { 175908, true }, - { 175921, true }, - { 175937, true }, - { 175955, true }, - { 175971, true }, - { 175984, true }, - { 176004, true }, - { 176017, true }, - { 176039, true }, - { 176056, true }, - { 176071, true }, - { 176092, true }, - { 176112, true }, - { 176125, true }, - { 176140, true }, - { 176152, true }, + { 175924, true }, + { 175939, true }, + { 175963, true }, + { 175975, true }, + { 175994, true }, + { 176007, true }, + { 176018, true }, + { 176038, true }, + { 176050, true }, + { 176068, true }, + { 176085, true }, + { 176100, true }, + { 176119, true }, + { 176132, true }, + { 176148, true }, { 176166, true }, - { 176184, true }, - { 176199, true }, - { 176218, true }, - { 176237, true }, - { 176251, true }, - { 176272, true }, - { 176287, true }, - { 176299, true }, - { 176316, true }, - { 176331, true }, - { 176349, true }, - { 176361, true }, - { 176375, true }, - { 176386, true }, - { 176408, true }, - { 176420, true }, + { 176182, true }, + { 176195, true }, + { 176215, true }, + { 176228, true }, + { 176250, true }, + { 176267, true }, + { 176282, true }, + { 176303, true }, + { 176323, true }, + { 176336, true }, + { 176351, true }, + { 176363, true }, + { 176377, true }, + { 176395, true }, + { 176410, true }, { 176429, true }, - { 176441, true }, - { 176456, true }, - { 176475, true }, - { 176493, true }, - { 176509, true }, - { 176528, true }, - { 176544, true }, - { 176561, true }, - { 176574, true }, - { 176593, true }, - { 176611, true }, - { 176617, true }, - { 176635, false }, - { 176655, true }, - { 176672, true }, + { 176448, true }, + { 176462, true }, + { 176483, true }, + { 176498, true }, + { 176510, true }, + { 176527, true }, + { 176542, true }, + { 176560, true }, + { 176572, true }, + { 176586, true }, + { 176597, true }, + { 176619, true }, + { 176631, true }, + { 176640, true }, + { 176652, true }, + { 176667, true }, { 176686, true }, - { 176698, true }, - { 176717, false }, - { 176734, true }, - { 176753, true }, - { 176764, true }, - { 176783, true }, - { 176806, true }, - { 176832, true }, - { 176843, true }, - { 176861, true }, - { 176881, true }, - { 176898, true }, - { 176917, true }, - { 176935, true }, - { 176944, true }, - { 176951, true }, - { 176958, true }, - { 176970, true }, - { 176980, true }, - { 176991, false }, - { 177011, true }, - { 177019, true }, - { 177030, true }, - { 177041, true }, - { 177052, true }, - { 177075, true }, - { 177099, true }, - { 177122, true }, - { 177145, true }, - { 177173, true }, - { 177202, true }, - { 177215, true }, + { 176704, true }, + { 176720, true }, + { 176739, true }, + { 176755, true }, + { 176772, true }, + { 176785, true }, + { 176804, true }, + { 176822, true }, + { 176828, true }, + { 176846, false }, + { 176866, true }, + { 176883, true }, + { 176897, true }, + { 176909, true }, + { 176928, false }, + { 176945, true }, + { 176964, true }, + { 176975, true }, + { 176994, true }, + { 177017, true }, + { 177043, true }, + { 177054, true }, + { 177072, true }, + { 177092, true }, + { 177109, true }, + { 177128, true }, + { 177146, true }, + { 177155, true }, + { 177162, true }, + { 177169, true }, + { 177181, true }, + { 177191, true }, + { 177202, false }, + { 177222, true }, { 177230, true }, - { 177249, true }, - { 177262, true }, - { 177280, true }, - { 177303, true }, - { 177314, true }, - { 177331, true }, - { 177342, true }, - { 177357, true }, - { 177368, true }, - { 177386, true }, - { 177412, true }, + { 177241, true }, + { 177252, true }, + { 177263, true }, + { 177286, true }, + { 177310, true }, + { 177333, true }, + { 177356, true }, + { 177384, true }, + { 177413, true }, + { 177426, true }, { 177441, true }, - { 177453, true }, - { 177466, false }, - { 177486, true }, - { 177504, true }, - { 177519, true }, - { 177540, false }, - { 177556, true }, - { 177572, true }, - { 177590, true }, - { 177606, true }, - { 177621, true }, - { 177639, true }, - { 177655, true }, - { 177667, true }, - { 177689, true }, - { 177711, true }, - { 177731, true }, - { 177751, true }, - { 177770, true }, - { 177787, true }, - { 177805, false }, - { 177823, true }, - { 177843, true }, - { 177862, true }, - { 177881, true }, - { 177902, true }, - { 177929, true }, - { 177941, true }, - { 177955, true }, - { 177970, true }, + { 177460, true }, + { 177473, true }, + { 177491, true }, + { 177514, true }, + { 177525, true }, + { 177542, true }, + { 177553, true }, + { 177568, true }, + { 177579, true }, + { 177597, true }, + { 177623, true }, + { 177652, true }, + { 177664, true }, + { 177677, false }, + { 177697, true }, + { 177715, true }, + { 177730, true }, + { 177751, false }, + { 177767, true }, + { 177783, true }, + { 177801, true }, + { 177817, true }, + { 177832, true }, + { 177850, true }, + { 177866, true }, + { 177878, true }, + { 177900, true }, + { 177922, true }, + { 177942, true }, + { 177962, true }, { 177981, true }, - { 178000, true }, - { 178014, true }, - { 178023, true }, - { 178038, true }, - { 178048, true }, - { 178061, true }, - { 178081, true }, - { 178090, true }, - { 178100, true }, - { 178121, false }, - { 178138, true }, - { 178158, true }, - { 178167, true }, - { 178180, true }, - { 178197, true }, + { 177998, true }, + { 178016, false }, + { 178034, true }, + { 178054, true }, + { 178073, true }, + { 178092, true }, + { 178113, true }, + { 178140, true }, + { 178152, true }, + { 178166, true }, + { 178181, true }, + { 178192, true }, { 178211, true }, { 178225, true }, - { 178237, true }, - { 178254, true }, - { 178269, true }, - { 178286, true }, - { 178302, true }, - { 178319, true }, - { 178335, true }, - { 178347, true }, - { 178358, false }, - { 178374, true }, - { 178385, true }, - { 178401, true }, - { 178416, true }, - { 178432, true }, - { 178445, true }, - { 178454, true }, - { 178467, true }, - { 178484, true }, - { 178496, true }, - { 178508, true }, - { 178520, true }, - { 178532, true }, - { 178541, true }, - { 178553, true }, - { 178568, true }, - { 178582, true }, - { 178594, true }, - { 178611, true }, - { 178623, true }, - { 178633, true }, - { 178649, true }, - { 178670, true }, - { 178688, true }, - { 178704, true }, - { 178720, true }, - { 178740, true }, - { 178755, true }, - { 178767, true }, - { 178782, true }, - { 178792, true }, - { 178807, true }, - { 178819, true }, - { 178831, true }, - { 178846, true }, + { 178234, true }, + { 178249, true }, + { 178259, true }, + { 178272, true }, + { 178292, true }, + { 178301, true }, + { 178311, true }, + { 178332, false }, + { 178349, true }, + { 178369, true }, + { 178378, true }, + { 178391, true }, + { 178408, true }, + { 178422, true }, + { 178436, true }, + { 178448, true }, + { 178465, true }, + { 178480, true }, + { 178497, true }, + { 178513, true }, + { 178530, true }, + { 178546, true }, + { 178558, true }, + { 178569, false }, + { 178585, true }, + { 178596, true }, + { 178612, true }, + { 178627, true }, + { 178643, true }, + { 178656, true }, + { 178665, true }, + { 178678, true }, + { 178695, true }, + { 178707, true }, + { 178719, true }, + { 178731, true }, + { 178743, true }, + { 178752, true }, + { 178764, true }, + { 178779, true }, + { 178793, true }, + { 178805, true }, + { 178822, true }, + { 178834, true }, + { 178844, true }, { 178860, true }, - { 178871, true }, - { 178882, true }, - { 178893, true }, - { 178901, true }, - { 178914, true }, - { 178927, true }, - { 178944, true }, - { 178954, true }, - { 178967, true }, - { 178984, true }, - { 178998, true }, - { 179007, true }, - { 179022, true }, - { 179036, true }, - { 179049, true }, - { 179063, true }, - { 179077, true }, - { 179085, true }, - { 179102, true }, - { 179117, true }, - { 179132, true }, - { 179146, true }, - { 179162, true }, + { 178881, true }, + { 178899, true }, + { 178915, true }, + { 178931, true }, + { 178951, true }, + { 178966, true }, + { 178978, true }, + { 178993, true }, + { 179003, true }, + { 179018, true }, + { 179030, true }, + { 179042, true }, + { 179057, true }, + { 179071, true }, + { 179082, true }, + { 179093, true }, + { 179104, true }, + { 179112, true }, + { 179125, true }, + { 179138, true }, + { 179155, true }, + { 179165, true }, { 179178, true }, - { 179192, true }, - { 179208, true }, - { 179230, true }, + { 179195, true }, + { 179209, true }, + { 179218, true }, + { 179233, true }, { 179247, true }, { 179260, true }, { 179274, true }, - { 179290, false }, - { 179308, true }, - { 179323, true }, - { 179340, true }, - { 179355, true }, - { 179372, false }, - { 179398, true }, - { 179413, true }, - { 179431, true }, + { 179282, true }, + { 179299, true }, + { 179314, true }, + { 179329, true }, + { 179343, true }, + { 179359, true }, + { 179375, true }, + { 179389, true }, + { 179405, true }, + { 179427, true }, { 179444, true }, { 179457, true }, - { 179469, true }, - { 179488, true }, - { 179498, true }, - { 179514, true }, - { 179526, true }, - { 179548, true }, - { 179565, true }, - { 179596, true }, - { 179606, true }, - { 179617, true }, - { 179629, true }, - { 179643, true }, - { 179655, true }, - { 179663, true }, - { 179671, true }, - { 179682, false }, - { 179702, true }, - { 179720, true }, - { 179740, true }, - { 179755, true }, - { 179770, true }, - { 179787, false }, - { 179801, true }, - { 179821, true }, - { 179832, true }, - { 179857, true }, - { 179878, true }, - { 179896, true }, - { 179911, true }, - { 179928, true }, - { 179944, true }, - { 179969, true }, - { 179980, true }, - { 179991, true }, - { 180005, true }, - { 180018, false }, - { 180046, true }, - { 180058, true }, - { 180071, true }, - { 180084, false }, - { 180092, true }, - { 180102, true }, - { 180117, true }, - { 180129, true }, - { 180148, true }, - { 180160, true }, - { 180173, true }, - { 180186, true }, - { 180201, true }, - { 180214, true }, - { 180236, true }, - { 180250, true }, - { 180263, true }, - { 180283, false }, + { 179471, true }, + { 179487, false }, + { 179505, true }, + { 179520, true }, + { 179537, true }, + { 179552, true }, + { 179569, false }, + { 179595, true }, + { 179610, true }, + { 179628, true }, + { 179641, true }, + { 179654, true }, + { 179666, true }, + { 179685, true }, + { 179695, true }, + { 179711, true }, + { 179723, true }, + { 179745, true }, + { 179762, true }, + { 179793, true }, + { 179803, true }, + { 179814, true }, + { 179826, true }, + { 179840, true }, + { 179852, true }, + { 179860, true }, + { 179868, true }, + { 179879, false }, + { 179899, true }, + { 179917, true }, + { 179937, true }, + { 179952, true }, + { 179967, true }, + { 179984, true }, + { 180004, true }, + { 180015, true }, + { 180040, true }, + { 180061, true }, + { 180079, true }, + { 180094, true }, + { 180111, true }, + { 180127, true }, + { 180152, true }, + { 180163, true }, + { 180174, true }, + { 180188, true }, + { 180201, false }, + { 180229, true }, + { 180241, true }, + { 180254, true }, + { 180267, false }, + { 180275, true }, + { 180285, true }, { 180300, true }, { 180318, true }, - { 180332, true }, - { 180346, true }, - { 180357, true }, - { 180368, true }, - { 180381, true }, - { 180398, true }, - { 180406, true }, - { 180421, true }, - { 180434, true }, - { 180448, true }, - { 180463, true }, - { 180488, true }, - { 180524, true }, - { 180537, true }, + { 180330, true }, + { 180349, true }, + { 180361, true }, + { 180374, true }, + { 180387, true }, + { 180402, true }, + { 180415, true }, + { 180437, true }, + { 180451, true }, + { 180464, true }, + { 180484, false }, + { 180501, true }, + { 180519, true }, + { 180533, true }, { 180547, true }, - { 180562, true }, - { 180575, true }, - { 180597, true }, - { 180619, true }, - { 180637, true }, - { 180650, true }, - { 180661, true }, - { 180673, true }, - { 180691, true }, - { 180699, true }, - { 180732, true }, - { 180739, true }, - { 180756, true }, - { 180772, true }, - { 180789, true }, - { 180799, true }, - { 180812, true }, - { 180830, false }, - { 180848, true }, - { 180866, true }, - { 180878, true }, - { 180890, true }, - { 180901, true }, - { 180914, true }, - { 180930, true }, - { 180944, true }, - { 180964, true }, - { 180978, true }, + { 180558, true }, + { 180569, true }, + { 180582, true }, + { 180599, true }, + { 180607, true }, + { 180622, true }, + { 180635, true }, + { 180649, true }, + { 180664, true }, + { 180689, true }, + { 180725, true }, + { 180738, true }, + { 180748, true }, + { 180763, true }, + { 180776, true }, + { 180798, true }, + { 180820, true }, + { 180838, true }, + { 180851, true }, + { 180862, true }, + { 180874, true }, + { 180892, true }, + { 180900, true }, + { 180933, true }, + { 180940, true }, + { 180957, true }, + { 180973, true }, { 180990, true }, - { 181010, true }, - { 181021, true }, - { 181038, true }, - { 181048, true }, - { 181057, true }, - { 181068, true }, - { 181087, true }, - { 181104, true }, - { 181118, true }, - { 181132, true }, - { 181155, true }, - { 181175, true }, - { 181189, true }, - { 181203, true }, - { 181215, true }, - { 181227, true }, - { 181243, true }, - { 181257, true }, - { 181267, true }, - { 181281, true }, - { 181290, true }, - { 181302, true }, - { 181314, true }, - { 181325, true }, - { 181334, true }, - { 181343, true }, - { 181354, true }, - { 181368, true }, - { 181374, true }, - { 181386, true }, - { 181399, true }, - { 181414, false }, - { 181441, true }, - { 181451, true }, - { 181464, true }, - { 181477, true }, - { 181493, true }, - { 181514, true }, + { 181000, true }, + { 181013, true }, + { 181031, false }, + { 181049, true }, + { 181067, true }, + { 181079, true }, + { 181091, true }, + { 181102, true }, + { 181115, true }, + { 181131, true }, + { 181145, true }, + { 181165, true }, + { 181179, true }, + { 181191, true }, + { 181211, true }, + { 181222, true }, + { 181239, true }, + { 181249, true }, + { 181258, true }, + { 181269, true }, + { 181288, true }, + { 181305, true }, + { 181319, true }, + { 181333, true }, + { 181356, true }, + { 181376, true }, + { 181390, true }, + { 181404, true }, + { 181416, true }, + { 181428, true }, + { 181444, true }, + { 181458, true }, + { 181468, true }, + { 181482, true }, + { 181491, true }, + { 181503, true }, + { 181515, true }, + { 181526, true }, { 181535, true }, - { 181554, true }, - { 181564, true }, - { 181576, true }, - { 181587, false }, - { 181595, true }, - { 181610, true }, - { 181624, true }, - { 181638, true }, - { 181650, true }, - { 181663, true }, - { 181673, true }, + { 181544, true }, + { 181555, true }, + { 181569, true }, + { 181575, true }, + { 181587, true }, + { 181600, true }, + { 181615, false }, + { 181642, true }, + { 181652, true }, + { 181665, true }, + { 181678, true }, { 181694, true }, - { 181706, true }, - { 181717, true }, - { 181737, true }, - { 181756, true }, - { 181767, true }, - { 181782, true }, - { 181807, false }, - { 181835, false }, - { 181847, true }, - { 181858, true }, + { 181715, true }, + { 181736, true }, + { 181755, true }, + { 181765, true }, + { 181777, true }, + { 181788, false }, + { 181796, true }, + { 181811, true }, + { 181825, true }, + { 181839, true }, + { 181851, true }, + { 181864, true }, { 181874, true }, - { 181889, true }, - { 181904, true }, - { 181915, true }, - { 181932, true }, - { 181944, true }, - { 181960, true }, - { 181975, true }, - { 181990, true }, - { 182006, true }, - { 182023, true }, - { 182046, true }, - { 182065, true }, - { 182079, true }, - { 182100, true }, - { 182120, true }, - { 182138, true }, - { 182157, true }, - { 182175, true }, - { 182193, true }, - { 182209, true }, - { 182224, false }, - { 182239, false }, - { 182253, true }, + { 181895, true }, + { 181907, true }, + { 181918, true }, + { 181938, true }, + { 181957, true }, + { 181968, true }, + { 181983, true }, + { 182008, false }, + { 182036, false }, + { 182048, true }, + { 182059, true }, + { 182075, true }, + { 182090, true }, + { 182105, true }, + { 182116, true }, + { 182133, true }, + { 182145, true }, + { 182161, true }, + { 182176, true }, + { 182191, true }, + { 182207, true }, + { 182224, true }, + { 182247, true }, { 182266, true }, - { 182282, true }, - { 182293, true }, - { 182304, true }, - { 182316, true }, - { 182331, true }, - { 182349, true }, - { 182367, true }, - { 182389, true }, - { 182403, true }, - { 182420, true }, - { 182439, true }, - { 182457, true }, - { 182478, true }, - { 182492, false }, - { 182504, true }, - { 182519, true }, - { 182535, true }, - { 182553, true }, - { 182563, true }, - { 182575, false }, - { 182586, true }, - { 182605, false }, - { 182624, true }, - { 182639, true }, - { 182652, false }, - { 182671, true }, - { 182682, true }, - { 182700, true }, - { 182714, true }, - { 182739, true }, + { 182280, true }, + { 182301, true }, + { 182321, true }, + { 182339, true }, + { 182358, true }, + { 182376, true }, + { 182394, true }, + { 182410, true }, + { 182425, false }, + { 182440, false }, + { 182454, true }, + { 182467, true }, + { 182483, true }, + { 182494, true }, + { 182505, true }, + { 182517, true }, + { 182532, true }, + { 182550, true }, + { 182568, true }, + { 182590, true }, + { 182604, true }, + { 182621, true }, + { 182640, true }, + { 182658, true }, + { 182679, true }, + { 182693, false }, + { 182705, true }, + { 182720, true }, + { 182736, true }, { 182754, true }, - { 182772, true }, + { 182764, true }, + { 182776, false }, { 182787, true }, - { 182802, true }, - { 182819, true }, - { 182830, true }, + { 182806, false }, + { 182825, true }, { 182840, true }, - { 182852, true }, - { 182866, true }, - { 182881, true }, - { 182890, true }, - { 182907, true }, - { 182922, false }, - { 182935, true }, - { 182947, true }, - { 182968, true }, - { 182981, true }, - { 182998, true }, - { 183018, true }, + { 182853, false }, + { 182872, true }, + { 182883, true }, + { 182901, true }, + { 182915, true }, + { 182940, true }, + { 182955, true }, + { 182973, true }, + { 182988, true }, + { 183003, true }, + { 183020, true }, + { 183031, true }, { 183041, true }, - { 183060, true }, - { 183072, true }, - { 183083, true }, - { 183093, true }, + { 183053, true }, + { 183067, true }, + { 183082, true }, + { 183091, true }, { 183108, true }, - { 183122, true }, + { 183123, false }, { 183136, true }, - { 183156, true }, - { 183179, true }, - { 183192, true }, - { 183210, true }, - { 183218, true }, - { 183225, true }, - { 183233, true }, - { 183248, true }, - { 183260, true }, - { 183277, true }, - { 183288, false }, - { 183305, true }, - { 183318, true }, - { 183329, false }, - { 183342, true }, - { 183357, false }, - { 183381, false }, + { 183148, true }, + { 183169, true }, + { 183182, true }, + { 183199, true }, + { 183219, true }, + { 183242, true }, + { 183261, true }, + { 183273, true }, + { 183284, true }, + { 183294, true }, + { 183309, true }, + { 183323, true }, + { 183337, true }, + { 183357, true }, + { 183380, true }, { 183393, true }, - { 183418, true }, - { 183427, true }, - { 183439, true }, - { 183459, true }, - { 183476, true }, - { 183486, true }, - { 183507, true }, - { 183516, true }, - { 183533, true }, + { 183411, true }, + { 183419, true }, + { 183426, true }, + { 183434, true }, + { 183449, true }, + { 183461, true }, + { 183478, true }, + { 183489, false }, + { 183498, false }, + { 183515, true }, + { 183528, true }, + { 183539, false }, { 183552, true }, - { 183570, true }, - { 183586, true }, - { 183601, true }, - { 183616, true }, - { 183631, true }, - { 183651, true }, - { 183664, true }, - { 183677, true }, + { 183567, false }, + { 183591, false }, + { 183603, true }, + { 183628, true }, + { 183637, true }, + { 183649, true }, + { 183669, true }, { 183686, true }, - { 183700, true }, - { 183723, true }, - { 183745, true }, - { 183771, true }, - { 183786, true }, - { 183801, true }, + { 183696, true }, + { 183717, true }, + { 183726, true }, + { 183743, true }, + { 183762, true }, + { 183780, true }, + { 183796, true }, { 183811, true }, - { 183825, true }, - { 183837, true }, - { 183860, true }, - { 183869, true }, - { 183877, true }, - { 183893, true }, - { 183907, true }, - { 183919, true }, - { 183932, true }, - { 183949, false }, - { 183967, true }, - { 183980, true }, - { 183991, true }, - { 184004, true }, - { 184015, true }, - { 184025, true }, - { 184040, true }, - { 184053, true }, - { 184069, true }, - { 184079, false }, - { 184089, true }, - { 184102, true }, + { 183826, true }, + { 183841, true }, + { 183861, true }, + { 183874, true }, + { 183887, true }, + { 183896, true }, + { 183910, true }, + { 183933, true }, + { 183955, true }, + { 183981, true }, + { 183996, true }, + { 184011, true }, + { 184021, true }, + { 184035, true }, + { 184047, true }, + { 184070, true }, + { 184079, true }, + { 184087, true }, + { 184103, true }, { 184117, true }, - { 184127, true }, - { 184143, true }, - { 184155, true }, - { 184164, true }, - { 184179, true }, + { 184129, true }, + { 184142, true }, + { 184159, false }, + { 184177, true }, { 184190, true }, - { 184208, true }, - { 184228, true }, - { 184244, true }, - { 184261, true }, - { 184274, true }, - { 184284, true }, - { 184294, true }, - { 184308, true }, - { 184320, true }, - { 184333, true }, - { 184350, true }, + { 184201, true }, + { 184214, true }, + { 184225, true }, + { 184235, true }, + { 184250, true }, + { 184263, true }, + { 184279, true }, + { 184289, false }, + { 184299, true }, + { 184312, true }, + { 184327, true }, + { 184337, true }, + { 184353, true }, { 184365, true }, - { 184382, true }, - { 184394, true }, - { 184411, true }, - { 184425, true }, - { 184434, true }, - { 184450, true }, - { 184463, true }, - { 184476, true }, - { 184491, false }, - { 184503, true }, - { 184516, true }, - { 184526, true }, - { 184535, true }, - { 184547, true }, - { 184555, true }, - { 184563, true }, - { 184571, true }, - { 184577, true }, - { 184588, true }, - { 184603, true }, - { 184616, true }, - { 184631, true }, - { 184650, true }, - { 184674, true }, - { 184687, true }, - { 184702, true }, + { 184374, true }, + { 184389, true }, + { 184400, true }, + { 184418, true }, + { 184438, true }, + { 184454, true }, + { 184471, true }, + { 184484, true }, + { 184494, true }, + { 184504, true }, + { 184518, true }, + { 184530, true }, + { 184543, true }, + { 184560, true }, + { 184575, true }, + { 184592, true }, + { 184604, true }, + { 184621, true }, + { 184635, true }, + { 184644, true }, + { 184660, true }, + { 184673, true }, + { 184686, true }, + { 184701, false }, + { 184713, true }, { 184726, true }, { 184736, true }, - { 184748, true }, - { 184764, true }, - { 184785, true }, - { 184800, false }, - { 184823, true }, - { 184844, true }, - { 184857, true }, - { 184870, true }, - { 184887, true }, - { 184901, true }, - { 184913, true }, - { 184932, true }, - { 184950, true }, - { 184974, false }, - { 185001, true }, - { 185027, true }, + { 184745, true }, + { 184753, true }, + { 184761, true }, + { 184769, true }, + { 184775, true }, + { 184786, true }, + { 184801, true }, + { 184814, true }, + { 184829, true }, + { 184848, true }, + { 184872, true }, + { 184885, true }, + { 184900, true }, + { 184924, true }, + { 184934, true }, + { 184946, true }, + { 184962, true }, + { 184983, true }, + { 184998, false }, + { 185021, true }, { 185042, true }, - { 185059, true }, - { 185075, true }, - { 185092, true }, - { 185109, true }, - { 185124, true }, - { 185137, true }, + { 185055, true }, + { 185068, true }, + { 185085, true }, + { 185099, true }, + { 185111, true }, + { 185130, true }, { 185148, true }, - { 185159, true }, - { 185169, true }, - { 185182, true }, - { 185200, true }, - { 185213, true }, - { 185227, true }, - { 185237, true }, - { 185248, true }, + { 185172, false }, + { 185199, true }, + { 185225, true }, + { 185240, true }, { 185257, true }, - { 185278, true }, - { 185292, true }, - { 185301, true }, - { 185308, true }, - { 185315, true }, - { 185323, true }, + { 185273, true }, + { 185290, true }, + { 185307, true }, + { 185322, true }, + { 185335, true }, { 185346, true }, - { 185359, true }, - { 185373, true }, - { 185386, true }, - { 185401, true }, - { 185416, true }, + { 185357, true }, + { 185367, true }, + { 185380, true }, + { 185398, true }, + { 185411, true }, { 185425, true }, - { 185433, true }, + { 185435, true }, { 185446, true }, - { 185454, true }, - { 185472, true }, - { 185484, true }, - { 185495, true }, - { 185511, true }, - { 185520, true }, - { 185533, true }, + { 185455, true }, + { 185476, true }, + { 185490, true }, + { 185499, true }, + { 185506, true }, + { 185513, true }, + { 185521, true }, { 185544, true }, - { 185556, true }, + { 185557, true }, { 185571, true }, - { 185580, true }, - { 185592, true }, - { 185603, true }, - { 185615, true }, - { 185628, true }, - { 185641, true }, - { 185656, true }, - { 185676, true }, - { 185688, true }, - { 185705, true }, - { 185715, true }, - { 185722, true }, - { 185732, true }, - { 185744, true }, - { 185760, true }, - { 185775, true }, - { 185784, true }, - { 185798, true }, - { 185818, true }, - { 185830, true }, - { 185843, true }, - { 185857, true }, - { 185875, true }, - { 185882, true }, + { 185584, true }, + { 185599, true }, + { 185614, true }, + { 185623, true }, + { 185631, true }, + { 185644, true }, + { 185652, true }, + { 185670, true }, + { 185682, true }, + { 185693, true }, + { 185709, true }, + { 185718, true }, + { 185731, true }, + { 185742, true }, + { 185754, true }, + { 185769, false }, + { 185782, true }, + { 185791, true }, + { 185803, true }, + { 185814, true }, + { 185826, true }, + { 185839, true }, + { 185852, true }, + { 185867, true }, + { 185887, true }, { 185899, true }, { 185916, true }, - { 185936, true }, + { 185926, true }, + { 185933, true }, + { 185943, true }, { 185955, true }, - { 185971, false }, - { 185989, true }, - { 186016, true }, - { 186033, true }, - { 186047, true }, - { 186061, true }, - { 186077, true }, - { 186092, false }, - { 186111, true }, - { 186129, true }, + { 185971, true }, + { 185986, true }, + { 185995, true }, + { 186009, true }, + { 186029, true }, + { 186041, true }, + { 186054, true }, + { 186068, true }, + { 186086, true }, + { 186093, true }, + { 186110, true }, + { 186127, true }, { 186147, true }, - { 186165, true }, - { 186182, true }, - { 186203, true }, - { 186222, true }, - { 186236, true }, - { 186247, true }, - { 186255, true }, - { 186265, true }, - { 186280, true }, - { 186295, true }, - { 186306, true }, - { 186328, true }, - { 186341, true }, - { 186356, true }, - { 186375, true }, - { 186401, true }, - { 186417, true }, - { 186435, true }, - { 186453, true }, - { 186468, true }, + { 186166, true }, + { 186182, false }, + { 186200, true }, + { 186227, true }, + { 186244, true }, + { 186258, true }, + { 186272, true }, + { 186288, true }, + { 186303, false }, + { 186322, true }, + { 186340, true }, + { 186358, true }, + { 186376, true }, + { 186393, true }, + { 186414, true }, + { 186433, true }, + { 186447, true }, + { 186458, true }, + { 186466, true }, { 186476, true }, - { 186489, true }, - { 186497, true }, - { 186508, true }, - { 186522, true }, - { 186536, true }, - { 186547, true }, - { 186563, true }, - { 186580, true }, - { 186590, true }, - { 186603, true }, - { 186621, true }, - { 186634, true }, - { 186653, false }, - { 186663, true }, + { 186491, true }, + { 186506, true }, + { 186517, true }, + { 186539, true }, + { 186552, true }, + { 186567, true }, + { 186586, true }, + { 186612, true }, + { 186628, true }, + { 186646, true }, + { 186664, true }, { 186679, true }, - { 186696, true }, - { 186712, true }, - { 186735, true }, - { 186760, true }, - { 186773, true }, - { 186784, true }, - { 186799, true }, - { 186811, true }, - { 186829, true }, - { 186854, true }, - { 186866, true }, - { 186878, true }, + { 186687, true }, + { 186700, true }, + { 186708, true }, + { 186719, true }, + { 186733, true }, + { 186747, true }, + { 186758, true }, + { 186774, true }, + { 186791, true }, + { 186801, true }, + { 186814, true }, + { 186832, true }, + { 186845, true }, + { 186864, false }, + { 186874, true }, { 186890, true }, - { 186901, true }, - { 186913, true }, - { 186931, true }, - { 186952, true }, - { 186968, true }, - { 186980, true }, - { 186994, true }, - { 187009, true }, + { 186907, true }, + { 186923, true }, + { 186946, true }, + { 186971, true }, + { 186984, true }, + { 186995, true }, + { 187010, true }, { 187022, true }, - { 187038, true }, - { 187052, false }, - { 187061, true }, - { 187079, true }, - { 187093, true }, - { 187101, false }, - { 187113, true }, - { 187130, true }, - { 187140, true }, - { 187151, true }, - { 187158, true }, - { 187169, true }, - { 187186, true }, - { 187203, true }, - { 187223, false }, - { 187238, true }, + { 187040, true }, + { 187065, true }, + { 187077, true }, + { 187089, true }, + { 187101, true }, + { 187112, true }, + { 187124, true }, + { 187142, true }, + { 187163, true }, + { 187179, true }, + { 187191, true }, + { 187205, true }, + { 187220, true }, + { 187233, true }, { 187249, true }, - { 187258, false }, - { 187265, true }, - { 187275, true }, - { 187286, true }, - { 187302, true }, - { 187311, true }, - { 187326, true }, - { 187336, true }, - { 187357, true }, - { 187366, true }, - { 187384, false }, - { 187395, true }, - { 187411, false }, - { 187424, true }, - { 187440, true }, - { 187452, true }, - { 187464, true }, - { 187484, true }, - { 187498, true }, - { 187514, true }, - { 187528, true }, - { 187543, true }, - { 187551, true }, - { 187564, true }, - { 187580, true }, - { 187593, true }, + { 187263, false }, + { 187272, true }, + { 187290, true }, + { 187304, true }, + { 187312, false }, + { 187324, true }, + { 187341, true }, + { 187351, true }, + { 187362, true }, + { 187369, true }, + { 187380, true }, + { 187397, true }, + { 187414, true }, + { 187434, false }, + { 187449, true }, + { 187460, true }, + { 187469, false }, + { 187476, true }, + { 187486, true }, + { 187497, true }, + { 187513, true }, + { 187522, true }, + { 187537, true }, + { 187547, true }, + { 187568, true }, + { 187577, true }, + { 187595, false }, { 187606, true }, - { 187620, true }, - { 187642, true }, - { 187662, true }, - { 187683, true }, - { 187702, true }, - { 187718, true }, - { 187746, true }, - { 187763, true }, - { 187784, true }, - { 187803, true }, - { 187827, true }, - { 187837, true }, - { 187846, true }, - { 187859, true }, - { 187868, true }, - { 187874, true }, - { 187886, true }, - { 187903, true }, - { 187917, true }, - { 187936, true }, - { 187950, true }, - { 187964, false }, - { 187977, true }, - { 187990, true }, - { 188003, true }, - { 188021, true }, - { 188042, true }, - { 188068, true }, - { 188081, true }, - { 188091, true }, - { 188110, true }, - { 188129, true }, - { 188146, true }, - { 188166, true }, - { 188182, true }, - { 188202, true }, - { 188211, true }, - { 188222, true }, - { 188231, true }, - { 188250, false }, - { 188266, false }, - { 188279, false }, - { 188292, true }, - { 188303, true }, - { 188314, true }, - { 188333, true }, - { 188346, true }, - { 188358, true }, - { 188371, true }, - { 188386, true }, - { 188395, true }, - { 188408, true }, - { 188423, true }, - { 188439, true }, - { 188453, true }, - { 188470, true }, - { 188479, true }, - { 188493, true }, - { 188517, true }, - { 188532, true }, - { 188548, true }, - { 188566, true }, - { 188583, true }, - { 188598, true }, - { 188616, true }, - { 188632, true }, - { 188645, true }, - { 188658, true }, - { 188678, true }, - { 188689, true }, - { 188703, true }, - { 188712, true }, - { 188721, true }, - { 188739, true }, - { 188753, true }, - { 188768, true }, - { 188788, true }, - { 188805, true }, - { 188822, true }, - { 188838, true }, - { 188850, true }, - { 188864, true }, - { 188878, true }, - { 188899, true }, - { 188924, false }, - { 188940, true }, - { 188959, true }, - { 188974, true }, - { 188984, true }, - { 189008, true }, + { 187622, false }, + { 187635, true }, + { 187651, true }, + { 187663, true }, + { 187675, true }, + { 187695, true }, + { 187709, true }, + { 187725, true }, + { 187739, true }, + { 187754, true }, + { 187762, true }, + { 187775, true }, + { 187791, true }, + { 187804, true }, + { 187817, true }, + { 187831, true }, + { 187853, true }, + { 187873, true }, + { 187894, true }, + { 187913, true }, + { 187929, true }, + { 187957, true }, + { 187974, true }, + { 187995, true }, + { 188014, true }, + { 188038, true }, + { 188048, true }, + { 188057, true }, + { 188066, true }, + { 188072, true }, + { 188084, true }, + { 188101, true }, + { 188115, true }, + { 188134, true }, + { 188148, true }, + { 188162, false }, + { 188175, true }, + { 188188, true }, + { 188201, true }, + { 188219, true }, + { 188240, true }, + { 188266, true }, + { 188279, true }, + { 188289, true }, + { 188308, true }, + { 188327, true }, + { 188344, true }, + { 188364, true }, + { 188380, true }, + { 188400, true }, + { 188409, true }, + { 188420, true }, + { 188429, true }, + { 188448, false }, + { 188464, false }, + { 188477, false }, + { 188490, true }, + { 188501, true }, + { 188512, true }, + { 188531, true }, + { 188544, true }, + { 188556, true }, + { 188569, true }, + { 188584, true }, + { 188593, true }, + { 188606, true }, + { 188621, true }, + { 188637, true }, + { 188651, true }, + { 188668, true }, + { 188677, true }, + { 188691, true }, + { 188715, true }, + { 188730, true }, + { 188746, true }, + { 188764, true }, + { 188781, true }, + { 188796, true }, + { 188814, true }, + { 188830, true }, + { 188843, true }, + { 188856, true }, + { 188876, true }, + { 188887, true }, + { 188901, true }, + { 188910, true }, + { 188919, true }, + { 188937, true }, + { 188951, true }, + { 188966, true }, + { 188986, true }, + { 189003, true }, { 189020, true }, - { 189030, true }, - { 189041, true }, - { 189054, true }, - { 189068, true }, - { 189077, true }, - { 189106, true }, - { 189131, true }, - { 189156, true }, - { 189185, true }, - { 189197, true }, - { 189213, true }, - { 189222, true }, - { 189234, true }, - { 189248, true }, - { 189262, true }, - { 189276, true }, - { 189289, true }, - { 189308, true }, - { 189321, true }, - { 189338, true }, - { 189347, true }, - { 189362, true }, - { 189380, true }, - { 189394, false }, - { 189405, true }, - { 189418, true }, - { 189438, false }, - { 189451, true }, - { 189461, true }, - { 189480, true }, - { 189493, true }, - { 189505, true }, - { 189527, true }, - { 189535, true }, - { 189546, true }, - { 189557, true }, - { 189568, true }, + { 189036, true }, + { 189048, true }, + { 189062, true }, + { 189076, true }, + { 189097, true }, + { 189122, false }, + { 189138, true }, + { 189157, true }, + { 189172, true }, + { 189182, true }, + { 189206, true }, + { 189218, true }, + { 189228, true }, + { 189239, true }, + { 189252, true }, + { 189266, true }, + { 189275, true }, + { 189304, true }, + { 189329, true }, + { 189354, true }, + { 189383, true }, + { 189395, true }, + { 189411, true }, + { 189420, true }, + { 189432, true }, + { 189446, true }, + { 189460, true }, + { 189474, true }, + { 189487, true }, + { 189506, true }, + { 189519, true }, + { 189536, true }, + { 189545, true }, + { 189560, true }, { 189578, true }, - { 189588, true }, - { 189597, true }, - { 189605, true }, - { 189611, false }, - { 189619, true }, - { 189628, true }, - { 189637, true }, - { 189645, true }, - { 189655, true }, - { 189663, true }, - { 189682, true }, - { 189689, true }, - { 189714, true }, - { 189721, true }, - { 189734, true }, - { 189748, true }, - { 189758, true }, - { 189768, true }, - { 189787, true }, - { 189799, true }, - { 189814, true }, - { 189825, true }, - { 189837, true }, - { 189850, true }, - { 189858, true }, - { 189871, true }, - { 189883, true }, - { 189902, true }, - { 189913, true }, - { 189940, false }, - { 189951, true }, + { 189592, false }, + { 189603, true }, + { 189616, true }, + { 189636, false }, + { 189649, true }, + { 189659, true }, + { 189678, true }, + { 189691, true }, + { 189703, true }, + { 189725, true }, + { 189733, true }, + { 189744, true }, + { 189755, true }, + { 189766, true }, + { 189776, true }, + { 189786, true }, + { 189795, true }, + { 189803, true }, + { 189809, false }, + { 189817, true }, + { 189826, true }, + { 189835, true }, + { 189843, true }, + { 189853, true }, + { 189861, true }, + { 189880, true }, + { 189887, true }, + { 189912, true }, + { 189919, true }, + { 189932, true }, + { 189946, true }, + { 189956, true }, { 189966, true }, - { 189982, true }, - { 190004, true }, - { 190018, true }, - { 190031, true }, - { 190044, true }, - { 190063, true }, - { 190092, true }, - { 190108, true }, - { 190121, true }, - { 190141, false }, - { 190168, false }, - { 190184, true }, - { 190200, true }, - { 190215, true }, - { 190231, true }, - { 190249, true }, - { 190268, true }, - { 190277, true }, - { 190290, true }, - { 190307, true }, - { 190326, true }, - { 190339, true }, - { 190357, true }, - { 190378, true }, - { 190391, true }, - { 190410, true }, - { 190427, true }, - { 190441, true }, - { 190459, true }, + { 189985, true }, + { 189997, true }, + { 190012, true }, + { 190023, true }, + { 190035, true }, + { 190048, true }, + { 190056, true }, + { 190069, true }, + { 190081, true }, + { 190100, true }, + { 190111, true }, + { 190138, true }, + { 190149, false }, + { 190160, true }, + { 190175, true }, + { 190191, true }, + { 190213, true }, + { 190227, true }, + { 190240, true }, + { 190253, true }, + { 190272, true }, + { 190301, true }, + { 190317, true }, + { 190330, true }, + { 190350, false }, + { 190377, false }, + { 190393, true }, + { 190409, true }, + { 190424, true }, + { 190440, true }, + { 190458, true }, { 190477, true }, - { 190493, true }, - { 190511, true }, - { 190524, true }, - { 190540, true }, - { 190561, true }, - { 190571, true }, - { 190584, true }, - { 190593, true }, - { 190604, true }, - { 190614, true }, - { 190627, true }, - { 190640, true }, - { 190656, true }, - { 190669, true }, - { 190683, true }, - { 190698, true }, - { 190712, true }, - { 190727, true }, - { 190739, true }, - { 190756, true }, - { 190772, true }, - { 190791, true }, - { 190807, true }, - { 190820, true }, - { 190835, true }, - { 190844, true }, - { 190854, true }, - { 190863, true }, - { 190875, false }, + { 190486, true }, + { 190499, true }, + { 190516, true }, + { 190535, true }, + { 190548, true }, + { 190566, true }, + { 190587, true }, + { 190600, true }, + { 190619, true }, + { 190636, true }, + { 190650, true }, + { 190668, true }, + { 190686, true }, + { 190702, true }, + { 190720, true }, + { 190733, true }, + { 190749, true }, + { 190770, true }, + { 190780, true }, + { 190793, true }, + { 190802, true }, + { 190813, true }, + { 190823, true }, + { 190836, true }, + { 190849, true }, + { 190865, true }, + { 190878, true }, { 190892, true }, - { 190910, true }, - { 190934, true }, - { 190958, true }, - { 190977, true }, - { 190991, true }, - { 190999, true }, - { 191010, true }, - { 191024, true }, - { 191036, true }, - { 191045, false }, - { 191055, true }, - { 191075, true }, - { 191089, true }, - { 191102, true }, - { 191122, true }, - { 191140, true }, - { 191152, true }, + { 190907, true }, + { 190921, true }, + { 190936, true }, + { 190948, true }, + { 190965, true }, + { 190981, true }, + { 191000, true }, + { 191016, true }, + { 191029, true }, + { 191044, true }, + { 191053, true }, + { 191063, true }, + { 191072, true }, + { 191084, false }, + { 191101, true }, + { 191119, true }, + { 191143, true }, { 191167, true }, - { 191182, true }, - { 191193, true }, - { 191218, true }, - { 191233, false }, - { 191250, true }, - { 191262, false }, - { 191285, true }, - { 191304, true }, - { 191321, true }, - { 191338, true }, - { 191351, true }, - { 191362, true }, - { 191384, true }, - { 191407, true }, - { 191425, true }, - { 191435, false }, - { 191449, true }, - { 191466, true }, - { 191486, true }, - { 191503, true }, + { 191186, true }, + { 191200, true }, + { 191208, true }, + { 191219, true }, + { 191233, true }, + { 191245, true }, + { 191254, false }, + { 191264, true }, + { 191284, true }, + { 191298, true }, + { 191311, true }, + { 191331, true }, + { 191349, true }, + { 191361, true }, + { 191376, true }, + { 191391, true }, + { 191402, true }, + { 191427, true }, + { 191442, false }, + { 191459, true }, + { 191471, false }, + { 191494, true }, { 191513, true }, - { 191526, true }, - { 191541, true }, - { 191559, true }, - { 191570, true }, - { 191587, true }, - { 191603, true }, - { 191615, true }, - { 191652, true }, - { 191671, true }, - { 191685, true }, - { 191700, true }, - { 191715, false }, - { 191727, true }, - { 191744, false }, - { 191759, true }, - { 191772, true }, - { 191793, false }, - { 191805, true }, - { 191822, true }, - { 191835, true }, - { 191851, true }, - { 191867, true }, - { 191875, true }, - { 191891, true }, - { 191904, true }, - { 191922, true }, - { 191932, true }, - { 191943, true }, - { 191959, true }, - { 191969, true }, - { 191988, true }, - { 192001, true }, - { 192018, true }, - { 192032, true }, - { 192045, true }, - { 192060, false }, - { 192071, true }, - { 192091, true }, - { 192104, true }, - { 192117, true }, - { 192129, true }, - { 192148, true }, - { 192161, true }, - { 192176, true }, - { 192187, true }, - { 192198, true }, - { 192208, true }, - { 192218, true }, - { 192240, true }, - { 192260, true }, - { 192277, true }, - { 192295, true }, - { 192308, true }, - { 192321, true }, - { 192336, true }, - { 192345, true }, - { 192356, true }, - { 192371, true }, - { 192387, true }, - { 192409, true }, - { 192425, true }, - { 192441, true }, - { 192465, true }, - { 192480, true }, - { 192493, true }, - { 192512, true }, - { 192522, true }, - { 192536, true }, - { 192547, true }, - { 192564, true }, + { 191530, true }, + { 191547, true }, + { 191560, true }, + { 191571, true }, + { 191593, true }, + { 191616, true }, + { 191634, true }, + { 191644, false }, + { 191658, true }, + { 191675, true }, + { 191695, true }, + { 191712, true }, + { 191722, true }, + { 191735, true }, + { 191750, true }, + { 191768, true }, + { 191779, true }, + { 191796, true }, + { 191812, true }, + { 191824, true }, + { 191861, true }, + { 191880, true }, + { 191894, true }, + { 191909, true }, + { 191924, false }, + { 191936, true }, + { 191953, false }, + { 191968, true }, + { 191981, true }, + { 192002, false }, + { 192014, true }, + { 192031, true }, + { 192044, true }, + { 192060, true }, + { 192076, true }, + { 192084, true }, + { 192100, true }, + { 192113, true }, + { 192131, true }, + { 192141, true }, + { 192152, true }, + { 192168, true }, + { 192178, true }, + { 192197, true }, + { 192210, true }, + { 192227, true }, + { 192241, true }, + { 192254, true }, + { 192269, false }, + { 192280, true }, + { 192300, true }, + { 192313, true }, + { 192326, true }, + { 192338, true }, + { 192357, true }, + { 192370, true }, + { 192385, true }, + { 192396, true }, + { 192407, true }, + { 192429, true }, + { 192449, true }, + { 192466, true }, + { 192484, true }, + { 192497, true }, + { 192510, true }, + { 192525, true }, + { 192534, true }, + { 192545, true }, + { 192560, true }, { 192576, true }, - { 192593, true }, - { 192605, true }, - { 192622, true }, - { 192631, true }, - { 192651, true }, - { 192668, true }, - { 192683, true }, - { 192709, true }, - { 192727, true }, - { 192737, true }, - { 192754, true }, - { 192771, true }, - { 192786, true }, - { 192805, true }, - { 192822, true }, - { 192839, true }, - { 192850, true }, - { 192862, true }, - { 192874, true }, - { 192884, true }, - { 192893, true }, - { 192906, true }, - { 192921, true }, - { 192931, true }, + { 192598, true }, + { 192614, true }, + { 192630, true }, + { 192654, true }, + { 192669, true }, + { 192682, true }, + { 192701, true }, + { 192711, true }, + { 192725, true }, + { 192736, true }, + { 192753, true }, + { 192765, true }, + { 192782, true }, + { 192794, true }, + { 192811, true }, + { 192820, true }, + { 192840, true }, + { 192857, true }, + { 192872, true }, + { 192898, true }, + { 192916, true }, + { 192926, true }, { 192943, true }, - { 192957, false }, - { 192966, false }, - { 192978, true }, - { 192989, true }, - { 193006, true }, - { 193016, true }, - { 193026, true }, - { 193037, true }, - { 193046, true }, - { 193057, false }, - { 193070, true }, - { 193086, true }, - { 193098, true }, - { 193109, true }, - { 193123, false }, - { 193134, true }, - { 193157, true }, - { 193179, true }, - { 193187, true }, - { 193197, false }, - { 193209, true }, - { 193222, true }, - { 193230, true }, - { 193238, true }, - { 193253, true }, - { 193263, true }, - { 193279, true }, - { 193292, true }, - { 193301, true }, - { 193316, true }, - { 193325, true }, - { 193334, true }, - { 193343, true }, - { 193362, true }, - { 193375, true }, - { 193390, true }, - { 193412, true }, - { 193428, true }, - { 193444, true }, - { 193457, true }, + { 192960, true }, + { 192975, true }, + { 192994, true }, + { 193011, true }, + { 193028, true }, + { 193039, true }, + { 193051, true }, + { 193063, true }, + { 193073, true }, + { 193082, true }, + { 193095, true }, + { 193110, true }, + { 193120, true }, + { 193132, true }, + { 193146, false }, + { 193155, false }, + { 193167, true }, + { 193178, true }, + { 193195, true }, + { 193205, true }, + { 193215, true }, + { 193226, true }, + { 193235, true }, + { 193246, false }, + { 193259, true }, + { 193275, true }, + { 193287, true }, + { 193298, true }, + { 193312, false }, + { 193323, true }, + { 193346, true }, + { 193368, true }, + { 193376, true }, + { 193386, false }, + { 193398, true }, + { 193411, true }, + { 193419, true }, + { 193427, true }, + { 193442, true }, + { 193452, true }, { 193468, true }, - { 193480, true }, - { 193488, true }, - { 193502, true }, - { 193519, true }, + { 193481, true }, + { 193490, true }, + { 193505, true }, + { 193514, true }, + { 193523, true }, { 193532, true }, - { 193548, true }, - { 193569, true }, - { 193588, true }, - { 193605, true }, - { 193621, true }, - { 193634, true }, - { 193645, true }, - { 193659, true }, - { 193679, true }, - { 193703, true }, - { 193726, true }, + { 193551, true }, + { 193564, true }, + { 193579, true }, + { 193601, true }, + { 193617, true }, + { 193633, true }, + { 193646, true }, + { 193657, true }, + { 193669, true }, + { 193677, true }, + { 193691, true }, + { 193708, true }, + { 193721, true }, { 193737, true }, - { 193759, true }, - { 193772, false }, - { 193785, true }, - { 193799, true }, - { 193813, false }, + { 193758, true }, + { 193777, true }, + { 193794, true }, + { 193810, true }, + { 193823, true }, { 193834, true }, - { 193844, true }, - { 193856, true }, + { 193848, true }, { 193868, true }, - { 193880, true }, - { 193899, true }, - { 193925, true }, - { 193938, true }, - { 193952, true }, - { 193969, true }, + { 193892, true }, + { 193915, true }, + { 193926, true }, + { 193948, true }, + { 193961, false }, + { 193974, true }, { 193988, true }, - { 194005, true }, + { 194002, false }, { 194023, true }, - { 194038, true }, - { 194059, true }, - { 194081, true }, - { 194100, true }, - { 194112, true }, - { 194125, true }, - { 194137, true }, - { 194161, true }, - { 194171, true }, - { 194186, true }, - { 194203, true }, - { 194219, true }, - { 194237, true }, - { 194256, true }, - { 194273, true }, - { 194288, true }, - { 194304, true }, - { 194331, true }, - { 194345, true }, - { 194361, true }, - { 194376, true }, - { 194389, true }, - { 194398, true }, - { 194414, true }, - { 194429, true }, - { 194442, true }, - { 194455, false }, - { 194466, true }, - { 194482, true }, - { 194494, true }, - { 194511, true }, - { 194526, true }, - { 194537, true }, - { 194549, true }, + { 194033, true }, + { 194045, true }, + { 194057, true }, + { 194069, true }, + { 194088, true }, + { 194114, true }, + { 194127, true }, + { 194141, true }, + { 194158, true }, + { 194177, true }, + { 194194, true }, + { 194212, true }, + { 194227, true }, + { 194248, true }, + { 194270, true }, + { 194289, true }, + { 194301, true }, + { 194314, true }, + { 194326, true }, + { 194350, true }, + { 194360, true }, + { 194375, true }, + { 194392, true }, + { 194408, true }, + { 194426, true }, + { 194445, true }, + { 194462, true }, + { 194477, true }, + { 194493, true }, + { 194520, true }, + { 194534, true }, + { 194550, true }, { 194565, true }, - { 194588, true }, + { 194578, true }, + { 194587, true }, { 194603, true }, - { 194613, true }, - { 194627, true }, - { 194636, true }, - { 194643, true }, - { 194657, true }, - { 194677, true }, - { 194688, true }, - { 194702, true }, - { 194715, false }, - { 194729, true }, - { 194737, true }, - { 194748, true }, - { 194766, true }, - { 194776, true }, - { 194793, true }, - { 194803, true }, - { 194814, true }, - { 194839, true }, - { 194853, true }, - { 194864, true }, - { 194875, true }, - { 194890, true }, - { 194906, false }, - { 194917, true }, - { 194932, true }, - { 194947, false }, - { 194966, true }, - { 194977, true }, - { 194987, true }, - { 194998, true }, - { 195018, true }, - { 195029, true }, - { 195036, true }, - { 195048, true }, - { 195061, true }, - { 195079, false }, - { 195089, true }, - { 195098, true }, - { 195108, true }, - { 195119, true }, - { 195130, true }, - { 195142, true }, - { 195153, true }, - { 195161, true }, - { 195171, true }, - { 195188, true }, - { 195205, true }, - { 195214, true }, - { 195221, true }, - { 195240, true }, - { 195251, true }, - { 195270, false }, - { 195281, true }, - { 195298, true }, - { 195315, true }, - { 195328, true }, - { 195344, true }, - { 195355, true }, - { 195365, true }, - { 195376, true }, - { 195393, true }, - { 195410, false }, - { 195425, false }, - { 195433, true }, - { 195442, false }, - { 195455, true }, - { 195466, false }, - { 195473, true }, + { 194618, true }, + { 194631, true }, + { 194644, false }, + { 194655, true }, + { 194671, true }, + { 194683, true }, + { 194700, true }, + { 194715, true }, + { 194726, true }, + { 194738, true }, + { 194754, true }, + { 194777, true }, + { 194792, true }, + { 194802, true }, + { 194816, true }, + { 194825, true }, + { 194832, true }, + { 194846, true }, + { 194866, true }, + { 194877, true }, + { 194891, true }, + { 194904, false }, + { 194918, true }, + { 194926, true }, + { 194937, true }, + { 194955, true }, + { 194965, true }, + { 194982, true }, + { 194992, true }, + { 195003, true }, + { 195028, true }, + { 195042, true }, + { 195053, true }, + { 195064, true }, + { 195079, true }, + { 195095, false }, + { 195106, true }, + { 195121, true }, + { 195136, false }, + { 195155, true }, + { 195166, true }, + { 195176, true }, + { 195187, true }, + { 195207, true }, + { 195218, true }, + { 195225, true }, + { 195237, true }, + { 195250, true }, + { 195268, false }, + { 195278, true }, + { 195287, true }, + { 195297, true }, + { 195308, true }, + { 195319, true }, + { 195331, true }, + { 195342, true }, + { 195350, true }, + { 195360, true }, + { 195377, true }, + { 195394, true }, + { 195403, true }, + { 195410, true }, + { 195429, true }, + { 195440, true }, + { 195459, false }, + { 195470, true }, { 195487, true }, - { 195501, true }, - { 195521, false }, - { 195541, false }, - { 195553, false }, - { 195569, true }, - { 195581, true }, - { 195600, true }, - { 195610, true }, - { 195634, true }, - { 195642, true }, - { 195659, true }, - { 195675, true }, - { 195691, true }, - { 195704, true }, - { 195713, true }, - { 195725, true }, - { 195738, true }, - { 195753, true }, - { 195767, true }, - { 195783, false }, - { 195798, true }, - { 195807, true }, - { 195827, true }, - { 195835, true }, - { 195849, true }, - { 195862, true }, - { 195873, true }, - { 195883, false }, + { 195504, true }, + { 195517, true }, + { 195533, true }, + { 195544, true }, + { 195554, true }, + { 195565, true }, + { 195582, true }, + { 195599, false }, + { 195614, false }, + { 195622, true }, + { 195631, false }, + { 195644, true }, + { 195655, false }, + { 195662, true }, + { 195676, true }, + { 195690, true }, + { 195710, false }, + { 195730, false }, + { 195742, false }, + { 195758, true }, + { 195770, true }, + { 195789, true }, + { 195799, true }, + { 195823, true }, + { 195831, true }, + { 195848, true }, + { 195864, true }, + { 195880, true }, { 195893, true }, - { 195907, true }, - { 195919, true }, - { 195929, false }, + { 195902, true }, + { 195914, true }, + { 195927, true }, { 195942, true }, - { 195958, true }, - { 195980, true }, - { 195997, true }, - { 196010, true }, - { 196019, true }, - { 196028, true }, - { 196043, true }, - { 196057, true }, - { 196067, true }, - { 196077, true }, - { 196106, true }, - { 196127, true }, - { 196142, true }, - { 196156, true }, - { 196176, true }, - { 196192, true }, - { 196204, false }, - { 196220, true }, - { 196234, true }, - { 196249, true }, - { 196264, true }, - { 196278, true }, - { 196291, true }, - { 196302, true }, - { 196313, true }, - { 196329, true }, - { 196339, true }, - { 196363, false }, - { 196382, false }, - { 196394, true }, - { 196410, true }, + { 195956, true }, + { 195972, false }, + { 195987, true }, + { 195996, true }, + { 196016, true }, + { 196024, true }, + { 196038, true }, + { 196051, true }, + { 196062, true }, + { 196072, false }, + { 196082, true }, + { 196096, true }, + { 196108, true }, + { 196118, false }, + { 196131, true }, + { 196147, true }, + { 196169, true }, + { 196186, true }, + { 196199, true }, + { 196208, true }, + { 196217, true }, + { 196232, true }, + { 196246, true }, + { 196256, true }, + { 196266, true }, + { 196295, true }, + { 196316, true }, + { 196331, true }, + { 196345, true }, + { 196365, true }, + { 196381, true }, + { 196393, false }, + { 196409, true }, + { 196423, true }, { 196438, true }, - { 196470, true }, - { 196485, true }, - { 196497, true }, - { 196508, true }, - { 196517, true }, - { 196531, false }, - { 196544, true }, - { 196562, true }, - { 196570, true }, - { 196584, true }, - { 196598, true }, - { 196610, true }, - { 196631, true }, - { 196646, true }, - { 196662, true }, - { 196675, false }, - { 196683, false }, - { 196695, true }, - { 196704, true }, - { 196714, true }, - { 196725, true }, - { 196737, true }, - { 196753, true }, - { 196769, true }, - { 196779, true }, - { 196790, true }, - { 196801, true }, - { 196813, true }, - { 196823, true }, - { 196832, true }, + { 196453, true }, + { 196467, true }, + { 196480, true }, + { 196491, true }, + { 196502, true }, + { 196518, true }, + { 196528, true }, + { 196552, false }, + { 196571, false }, + { 196583, true }, + { 196599, true }, + { 196627, true }, + { 196659, true }, + { 196674, true }, + { 196686, true }, + { 196697, true }, + { 196706, true }, + { 196720, false }, + { 196733, true }, + { 196751, true }, + { 196759, true }, + { 196773, true }, + { 196787, true }, + { 196799, true }, + { 196820, true }, + { 196835, true }, { 196851, true }, - { 196879, true }, + { 196864, false }, + { 196872, false }, + { 196884, true }, { 196893, true }, - { 196907, true }, - { 196925, true }, + { 196903, true }, + { 196914, true }, + { 196926, true }, { 196942, true }, { 196958, true }, - { 196969, true }, - { 196984, true }, - { 196997, false }, - { 197013, true }, - { 197029, true }, - { 197042, true }, - { 197060, true }, - { 197078, true }, - { 197092, true }, - { 197104, true }, - { 197119, true }, - { 197139, true }, + { 196968, true }, + { 196979, true }, + { 196990, true }, + { 197002, true }, + { 197012, true }, + { 197021, true }, + { 197040, true }, + { 197068, true }, + { 197082, true }, + { 197096, true }, + { 197114, true }, + { 197131, true }, + { 197147, true }, { 197158, true }, - { 197177, true }, - { 197190, true }, - { 197206, true }, - { 197219, true }, - { 197234, true }, - { 197250, true }, + { 197173, true }, + { 197186, false }, + { 197202, true }, + { 197218, true }, + { 197231, true }, + { 197249, true }, { 197267, true }, - { 197283, true }, - { 197300, true }, - { 197313, true }, + { 197281, true }, + { 197293, true }, + { 197308, true }, { 197328, true }, { 197347, true }, - { 197360, true }, - { 197376, true }, - { 197387, true }, - { 197400, true }, - { 197414, true }, - { 197428, false }, - { 197444, true }, - { 197463, true }, - { 197483, true }, - { 197503, true }, - { 197519, true }, - { 197534, true }, - { 197551, true }, - { 197572, true }, + { 197366, true }, + { 197379, true }, + { 197395, true }, + { 197408, true }, + { 197423, true }, + { 197439, true }, + { 197456, true }, + { 197472, true }, + { 197489, true }, + { 197502, true }, + { 197517, true }, + { 197536, true }, + { 197549, true }, + { 197565, true }, + { 197576, true }, { 197589, true }, - { 197607, false }, - { 197626, true }, - { 197637, true }, - { 197653, true }, - { 197667, true }, - { 197680, true }, - { 197694, true }, - { 197707, true }, - { 197720, true }, - { 197736, true }, - { 197747, true }, - { 197756, true }, - { 197766, true }, - { 197777, true }, - { 197789, true }, - { 197803, true }, - { 197812, true }, - { 197829, true }, - { 197838, true }, - { 197851, true }, - { 197870, true }, - { 197891, true }, - { 197910, true }, - { 197927, false }, - { 197942, false }, - { 197958, false }, - { 197970, true }, - { 197990, true }, - { 198003, true }, - { 198023, true }, - { 198045, true }, - { 198068, true }, - { 198086, true }, - { 198102, true }, - { 198114, true }, - { 198127, true }, - { 198141, true }, - { 198150, true }, - { 198164, true }, - { 198172, true }, - { 198190, true }, - { 198200, true }, - { 198220, true }, - { 198237, true }, + { 197603, true }, + { 197617, false }, + { 197633, true }, + { 197652, true }, + { 197672, true }, + { 197692, true }, + { 197708, true }, + { 197723, true }, + { 197740, true }, + { 197761, true }, + { 197778, true }, + { 197796, false }, + { 197815, true }, + { 197826, true }, + { 197842, true }, + { 197856, true }, + { 197869, true }, + { 197883, true }, + { 197896, true }, + { 197909, true }, + { 197925, true }, + { 197936, true }, + { 197945, true }, + { 197955, true }, + { 197966, true }, + { 197978, true }, + { 197992, true }, + { 198001, true }, + { 198018, true }, + { 198027, true }, + { 198040, true }, + { 198059, true }, + { 198080, true }, + { 198099, true }, + { 198116, false }, + { 198131, false }, + { 198147, false }, + { 198159, true }, + { 198179, true }, + { 198192, true }, + { 198212, true }, + { 198234, true }, { 198257, true }, - { 198268, true }, - { 198281, true }, - { 198296, true }, - { 198308, true }, - { 198324, true }, - { 198337, true }, - { 198358, true }, - { 198366, true }, - { 198376, true }, - { 198399, true }, - { 198411, true }, - { 198420, true }, - { 198430, true }, - { 198443, true }, - { 198453, true }, - { 198468, true }, - { 198481, false }, - { 198491, true }, - { 198505, true }, + { 198275, true }, + { 198291, true }, + { 198303, true }, + { 198316, true }, + { 198328, true }, + { 198342, true }, + { 198351, true }, + { 198365, true }, + { 198373, true }, + { 198391, true }, + { 198401, true }, + { 198421, true }, + { 198438, true }, + { 198458, true }, + { 198469, true }, + { 198482, true }, + { 198497, true }, + { 198509, true }, { 198525, true }, { 198538, true }, - { 198558, false }, - { 198581, true }, - { 198594, true }, - { 198605, true }, - { 198616, true }, - { 198626, true }, - { 198651, true }, - { 198661, true }, - { 198675, true }, - { 198689, false }, - { 198704, true }, - { 198718, true }, - { 198743, true }, - { 198757, true }, - { 198769, true }, - { 198781, true }, + { 198559, true }, + { 198567, true }, + { 198577, true }, + { 198600, true }, + { 198612, true }, + { 198621, true }, + { 198631, true }, + { 198644, true }, + { 198654, true }, + { 198669, true }, + { 198682, false }, + { 198692, true }, + { 198706, true }, + { 198726, true }, + { 198739, true }, + { 198759, false }, + { 198782, true }, { 198795, true }, - { 198805, false }, - { 198825, true }, - { 198835, true }, - { 198849, true }, - { 198859, true }, - { 198872, true }, - { 198887, true }, - { 198896, true }, - { 198906, true }, - { 198920, true }, - { 198929, false }, - { 198940, true }, - { 198951, true }, - { 198962, true }, - { 198973, true }, - { 198983, true }, - { 198992, false }, - { 199012, true }, - { 199027, true }, - { 199039, true }, - { 199051, true }, - { 199063, true }, - { 199082, true }, - { 199102, true }, - { 199112, true }, - { 199126, true }, + { 198806, true }, + { 198817, true }, + { 198827, true }, + { 198852, true }, + { 198862, true }, + { 198876, true }, + { 198890, false }, + { 198905, true }, + { 198919, true }, + { 198944, true }, + { 198958, true }, + { 198970, true }, + { 198982, true }, + { 198996, true }, + { 199006, false }, + { 199026, true }, + { 199036, true }, + { 199050, true }, + { 199060, true }, + { 199073, true }, + { 199088, true }, + { 199097, true }, + { 199107, true }, + { 199121, true }, + { 199130, false }, { 199141, true }, - { 199158, true }, - { 199173, true }, - { 199181, true }, - { 199202, false }, - { 199220, true }, - { 199232, true }, - { 199254, true }, - { 199270, true }, - { 199285, true }, - { 199296, true }, - { 199318, true }, - { 199332, true }, - { 199353, true }, - { 199367, true }, - { 199384, true }, - { 199403, true }, - { 199422, true }, - { 199435, true }, + { 199152, true }, + { 199163, true }, + { 199174, true }, + { 199184, true }, + { 199193, false }, + { 199213, true }, + { 199228, true }, + { 199240, true }, + { 199252, true }, + { 199264, true }, + { 199283, true }, + { 199303, true }, + { 199313, true }, + { 199327, true }, + { 199342, true }, + { 199359, true }, + { 199374, true }, + { 199382, true }, + { 199403, false }, + { 199421, true }, + { 199433, true }, { 199455, true }, { 199471, true }, + { 199486, true }, { 199497, true }, - { 199518, true }, - { 199537, true }, - { 199559, true }, - { 199583, true }, - { 199599, true }, - { 199624, true }, - { 199650, true }, - { 199661, true }, - { 199685, true }, - { 199711, true }, - { 199729, true }, - { 199740, true }, - { 199762, true }, - { 199780, true }, - { 199790, true }, - { 199806, true }, - { 199828, true }, + { 199519, true }, + { 199533, true }, + { 199554, true }, + { 199568, true }, + { 199585, true }, + { 199604, true }, + { 199623, true }, + { 199636, true }, + { 199656, true }, + { 199672, true }, + { 199698, true }, + { 199719, true }, + { 199738, true }, + { 199760, true }, + { 199784, true }, + { 199800, true }, + { 199825, true }, { 199851, true }, - { 199863, true }, - { 199882, true }, - { 199900, true }, - { 199923, true }, - { 199936, true }, - { 199952, true }, - { 199970, true }, - { 199988, true }, - { 200014, true }, - { 200028, true }, - { 200046, true }, - { 200061, true }, - { 200078, true }, - { 200092, true }, - { 200119, true }, - { 200133, true }, - { 200151, true }, - { 200167, true }, - { 200183, true }, - { 200196, true }, - { 200216, true }, - { 200234, true }, - { 200253, true }, - { 200266, true }, - { 200302, true }, - { 200325, true }, - { 200345, true }, - { 200360, true }, - { 200377, true }, - { 200388, true }, - { 200406, true }, - { 200436, true }, - { 200452, true }, + { 199862, true }, + { 199886, true }, + { 199912, true }, + { 199930, true }, + { 199941, true }, + { 199963, true }, + { 199981, true }, + { 199991, true }, + { 200007, true }, + { 200029, true }, + { 200052, true }, + { 200064, true }, + { 200083, true }, + { 200101, true }, + { 200124, true }, + { 200137, true }, + { 200153, true }, + { 200171, true }, + { 200189, true }, + { 200215, true }, + { 200229, true }, + { 200247, true }, + { 200262, true }, + { 200279, true }, + { 200293, true }, + { 200320, true }, + { 200334, true }, + { 200352, true }, + { 200368, true }, + { 200384, true }, + { 200397, true }, + { 200417, true }, + { 200435, true }, + { 200454, true }, { 200467, true }, - { 200482, true }, - { 200493, true }, - { 200507, true }, - { 200529, true }, - { 200544, true }, - { 200559, true }, - { 200572, true }, - { 200587, true }, - { 200600, true }, - { 200623, true }, - { 200632, true }, - { 200654, true }, - { 200664, true }, + { 200503, true }, + { 200526, true }, + { 200546, true }, + { 200561, true }, + { 200578, true }, + { 200589, true }, + { 200607, true }, + { 200637, true }, + { 200653, true }, + { 200668, true }, { 200683, true }, - { 200707, true }, - { 200733, true }, - { 200751, true }, - { 200762, true }, - { 200779, true }, - { 200797, true }, - { 200813, true }, - { 200827, true }, - { 200840, true }, - { 200856, true }, - { 200875, true }, - { 200899, true }, - { 200912, true }, - { 200929, true }, - { 200944, true }, - { 200966, true }, - { 200985, true }, - { 201005, true }, - { 201022, false }, - { 201037, true }, - { 201055, true }, - { 201077, true }, - { 201093, true }, - { 201105, true }, - { 201117, true }, - { 201129, true }, + { 200694, true }, + { 200708, true }, + { 200730, true }, + { 200745, true }, + { 200760, true }, + { 200773, true }, + { 200788, true }, + { 200801, true }, + { 200824, true }, + { 200833, true }, + { 200855, true }, + { 200865, true }, + { 200884, true }, + { 200908, true }, + { 200934, true }, + { 200952, true }, + { 200963, true }, + { 200980, true }, + { 200998, true }, + { 201014, true }, + { 201028, true }, + { 201041, true }, + { 201057, true }, + { 201076, true }, + { 201100, true }, + { 201113, true }, + { 201130, true }, { 201145, true }, - { 201164, true }, - { 201184, true }, - { 201204, true }, - { 201220, true }, - { 201239, true }, - { 201269, false }, - { 201283, true }, - { 201300, true }, - { 201321, true }, - { 201341, true }, - { 201355, true }, - { 201373, true }, - { 201390, true }, - { 201406, true }, - { 201416, true }, - { 201427, true }, - { 201439, true }, - { 201458, true }, - { 201474, true }, - { 201494, true }, - { 201507, true }, - { 201518, true }, - { 201539, true }, - { 201567, true }, - { 201583, true }, - { 201596, true }, - { 201621, true }, - { 201638, true }, - { 201655, false }, - { 201670, true }, - { 201695, true }, - { 201705, true }, - { 201717, true }, - { 201736, true }, - { 201755, true }, - { 201772, true }, - { 201789, true }, - { 201805, false }, - { 201823, true }, - { 201840, true }, - { 201853, true }, - { 201877, true }, - { 201895, true }, - { 201916, true }, - { 201931, true }, + { 201167, true }, + { 201186, true }, + { 201206, true }, + { 201223, false }, + { 201238, true }, + { 201256, true }, + { 201278, true }, + { 201294, true }, + { 201306, true }, + { 201318, true }, + { 201330, true }, + { 201349, true }, + { 201369, true }, + { 201389, true }, + { 201405, true }, + { 201424, true }, + { 201454, false }, + { 201468, true }, + { 201485, true }, + { 201506, true }, + { 201526, true }, + { 201540, true }, + { 201558, true }, + { 201575, true }, + { 201591, true }, + { 201601, true }, + { 201613, true }, + { 201632, true }, + { 201648, true }, + { 201668, true }, + { 201681, true }, + { 201692, true }, + { 201713, true }, + { 201741, true }, + { 201757, true }, + { 201770, true }, + { 201795, true }, + { 201812, true }, + { 201829, false }, + { 201844, true }, + { 201869, true }, + { 201879, true }, + { 201891, true }, + { 201910, true }, + { 201929, true }, { 201946, true }, - { 201958, true }, - { 201983, true }, - { 201996, true }, - { 202018, true }, - { 202028, true }, - { 202045, true }, - { 202064, true }, - { 202077, true }, - { 202091, true }, - { 202104, true }, - { 202128, true }, - { 202150, true }, - { 202183, true }, - { 202198, true }, - { 202212, true }, - { 202221, true }, - { 202230, true }, - { 202244, true }, - { 202254, false }, - { 202268, true }, - { 202277, true }, - { 202288, true }, + { 201963, true }, + { 201979, false }, + { 201997, true }, + { 202014, true }, + { 202027, true }, + { 202051, true }, + { 202069, true }, + { 202090, true }, + { 202105, true }, + { 202120, true }, + { 202132, true }, + { 202157, true }, + { 202170, true }, + { 202192, true }, + { 202202, true }, + { 202219, true }, + { 202238, true }, + { 202251, true }, + { 202265, true }, + { 202278, true }, { 202302, true }, - { 202313, true }, - { 202331, true }, - { 202346, true }, - { 202359, true }, - { 202369, true }, - { 202382, true }, - { 202401, true }, - { 202421, true }, - { 202444, true }, + { 202324, true }, + { 202357, true }, + { 202372, true }, + { 202386, true }, + { 202395, true }, + { 202404, true }, + { 202418, true }, + { 202428, false }, + { 202442, true }, { 202451, true }, - { 202467, true }, - { 202485, true }, - { 202506, true }, - { 202518, true }, - { 202548, true }, - { 202561, true }, - { 202571, true }, - { 202583, true }, - { 202597, true }, - { 202611, true }, - { 202622, true }, - { 202637, true }, - { 202649, true }, - { 202661, true }, - { 202672, true }, - { 202687, true }, - { 202699, true }, - { 202715, true }, - { 202730, true }, - { 202746, true }, - { 202755, true }, - { 202766, false }, - { 202781, true }, - { 202795, true }, - { 202811, true }, - { 202831, true }, - { 202844, false }, - { 202864, true }, - { 202877, true }, - { 202891, true }, - { 202902, true }, - { 202919, true }, - { 202933, true }, - { 202945, true }, - { 202959, true }, - { 202971, true }, - { 202983, true }, - { 202995, true }, - { 203007, true }, - { 203020, true }, - { 203037, true }, - { 203064, true }, - { 203077, true }, + { 202462, true }, + { 202476, true }, + { 202487, true }, + { 202505, true }, + { 202520, true }, + { 202533, true }, + { 202543, true }, + { 202556, true }, + { 202575, true }, + { 202595, true }, + { 202618, true }, + { 202625, true }, + { 202641, true }, + { 202659, true }, + { 202680, true }, + { 202692, true }, + { 202722, true }, + { 202735, true }, + { 202745, true }, + { 202757, true }, + { 202771, true }, + { 202785, true }, + { 202796, true }, + { 202815, true }, + { 202830, true }, + { 202842, true }, + { 202854, true }, + { 202865, true }, + { 202880, true }, + { 202892, true }, + { 202908, true }, + { 202923, true }, + { 202939, true }, + { 202948, true }, + { 202959, false }, + { 202974, true }, + { 202988, true }, + { 203004, true }, + { 203024, true }, + { 203037, false }, + { 203057, true }, + { 203070, true }, + { 203084, true }, { 203095, true }, - { 203103, true }, - { 203115, true }, - { 203128, true }, - { 203155, true }, + { 203112, true }, + { 203126, true }, + { 203138, true }, + { 203152, true }, { 203164, true }, - { 203173, true }, - { 203191, true }, - { 203198, true }, - { 203225, true }, - { 203233, true }, - { 203242, true }, - { 203250, true }, - { 203263, true }, - { 203272, true }, - { 203284, true }, - { 203297, true }, - { 203306, true }, - { 203316, true }, - { 203326, true }, - { 203336, true }, - { 203346, true }, - { 203356, true }, - { 203365, true }, - { 203372, true }, - { 203388, true }, - { 203405, true }, - { 203412, true }, + { 203176, true }, + { 203188, true }, + { 203200, true }, + { 203213, true }, + { 203230, true }, + { 203257, true }, + { 203270, true }, + { 203288, true }, + { 203296, true }, + { 203308, true }, + { 203321, true }, + { 203348, true }, + { 203357, true }, + { 203366, true }, + { 203384, true }, + { 203391, true }, + { 203418, true }, { 203426, true }, + { 203435, true }, { 203443, true }, - { 203455, true }, - { 203472, true }, - { 203480, true }, - { 203487, true }, - { 203496, true }, - { 203505, true }, - { 203517, true }, - { 203531, true }, - { 203548, true }, - { 203564, true }, - { 203580, true }, - { 203599, true }, - { 203617, true }, - { 203632, true }, - { 203650, true }, - { 203667, true }, - { 203677, true }, + { 203456, true }, + { 203465, true }, + { 203477, true }, + { 203490, true }, + { 203499, true }, + { 203509, true }, + { 203519, true }, + { 203529, true }, + { 203539, true }, + { 203549, true }, + { 203558, true }, + { 203565, true }, + { 203581, true }, + { 203598, true }, + { 203605, true }, + { 203619, true }, + { 203636, true }, + { 203648, true }, + { 203665, true }, + { 203673, true }, + { 203680, true }, { 203689, true }, - { 203707, true }, + { 203698, true }, + { 203710, true }, { 203724, true }, - { 203739, true }, - { 203754, true }, - { 203766, true }, - { 203780, true }, - { 203788, true }, - { 203798, false }, - { 203823, true }, - { 203836, true }, - { 203846, true }, - { 203861, true }, - { 203873, true }, - { 203887, true }, - { 203896, true }, - { 203905, false }, + { 203741, true }, + { 203757, true }, + { 203773, true }, + { 203792, true }, + { 203810, true }, + { 203825, true }, + { 203843, true }, + { 203860, true }, + { 203870, true }, + { 203882, true }, + { 203900, true }, { 203917, true }, - { 203930, false }, - { 203963, true }, - { 203978, true }, - { 203989, true }, - { 204012, true }, - { 204025, true }, - { 204036, true }, - { 204050, true }, - { 204070, true }, - { 204083, true }, - { 204097, true }, + { 203932, true }, + { 203947, true }, + { 203959, true }, + { 203973, true }, + { 203981, true }, + { 203991, false }, + { 204016, true }, + { 204029, true }, + { 204039, true }, + { 204054, true }, + { 204066, true }, + { 204080, true }, + { 204089, true }, + { 204098, false }, { 204110, true }, - { 204124, true }, - { 204142, true }, + { 204123, false }, { 204156, true }, - { 204172, true }, - { 204187, true }, - { 204209, true }, - { 204219, true }, - { 204231, true }, - { 204245, true }, - { 204261, true }, - { 204273, true }, - { 204283, true }, - { 204296, true }, - { 204310, true }, - { 204321, true }, - { 204330, true }, - { 204338, true }, - { 204350, false }, - { 204358, true }, - { 204369, true }, - { 204385, true }, - { 204396, true }, - { 204409, true }, - { 204421, false }, - { 204435, true }, - { 204448, true }, - { 204459, true }, - { 204469, true }, - { 204483, true }, - { 204502, true }, - { 204513, true }, - { 204527, true }, - { 204538, true }, - { 204549, true }, - { 204560, true }, - { 204571, true }, - { 204582, true }, - { 204596, true }, - { 204608, true }, - { 204623, true }, - { 204637, true }, - { 204652, true }, + { 204171, true }, + { 204182, true }, + { 204205, true }, + { 204218, true }, + { 204229, true }, + { 204243, true }, + { 204263, true }, + { 204276, true }, + { 204290, true }, + { 204303, true }, + { 204317, true }, + { 204335, true }, + { 204349, true }, + { 204365, true }, + { 204380, true }, + { 204402, true }, + { 204412, true }, + { 204424, true }, + { 204438, true }, + { 204454, true }, + { 204466, true }, + { 204476, true }, + { 204489, true }, + { 204503, true }, + { 204512, true }, + { 204520, true }, + { 204532, false }, + { 204540, true }, + { 204551, true }, + { 204567, true }, + { 204578, true }, + { 204591, true }, + { 204603, false }, + { 204617, true }, + { 204630, true }, + { 204641, true }, + { 204651, true }, { 204665, true }, - { 204681, true }, - { 204690, true }, - { 204699, true }, - { 204713, true }, - { 204724, true }, - { 204735, false }, - { 204751, true }, - { 204762, true }, - { 204773, true }, - { 204789, false }, - { 204803, true }, - { 204816, true }, - { 204825, true }, - { 204835, true }, - { 204848, true }, - { 204858, true }, - { 204868, true }, + { 204684, true }, + { 204695, true }, + { 204709, true }, + { 204720, true }, + { 204731, true }, + { 204742, true }, + { 204753, true }, + { 204764, true }, + { 204778, true }, + { 204790, true }, + { 204805, true }, + { 204819, true }, + { 204834, true }, + { 204847, true }, + { 204863, true }, + { 204872, true }, { 204881, true }, { 204895, true }, - { 204907, true }, - { 204921, true }, - { 204942, true }, - { 204957, true }, - { 204971, true }, - { 204983, true }, - { 204998, false }, - { 205017, true }, - { 205027, true }, - { 205039, true }, - { 205049, true }, - { 205061, true }, - { 205078, true }, - { 205097, true }, - { 205106, false }, - { 205121, true }, - { 205139, true }, - { 205155, false }, - { 205167, true }, - { 205193, true }, - { 205204, true }, - { 205225, true }, - { 205240, true }, - { 205258, true }, - { 205275, true }, - { 205288, true }, - { 205304, true }, - { 205319, true }, + { 204906, true }, + { 204917, false }, + { 204933, true }, + { 204944, true }, + { 204955, true }, + { 204971, false }, + { 204985, true }, + { 204998, true }, + { 205007, true }, + { 205020, true }, + { 205030, true }, + { 205040, true }, + { 205053, true }, + { 205067, true }, + { 205079, true }, + { 205093, true }, + { 205114, true }, + { 205129, true }, + { 205143, true }, + { 205155, true }, + { 205170, false }, + { 205189, true }, + { 205199, true }, + { 205211, true }, + { 205221, true }, + { 205233, true }, + { 205250, true }, + { 205269, true }, + { 205278, false }, + { 205293, true }, + { 205311, true }, + { 205327, false }, { 205339, true }, - { 205350, true }, { 205365, true }, - { 205377, true }, - { 205388, true }, - { 205401, true }, - { 205419, true }, - { 205439, true }, - { 205458, true }, - { 205486, true }, - { 205500, true }, - { 205519, true }, - { 205540, true }, + { 205376, true }, + { 205397, true }, + { 205412, true }, + { 205430, true }, + { 205447, true }, + { 205460, true }, + { 205476, true }, + { 205491, true }, + { 205511, true }, + { 205522, true }, + { 205537, true }, { 205549, true }, - { 205573, false }, - { 205592, true }, - { 205606, true }, - { 205624, true }, - { 205639, true }, - { 205656, true }, - { 205676, true }, - { 205690, true }, - { 205700, true }, - { 205718, true }, - { 205731, true }, - { 205752, true }, + { 205560, true }, + { 205573, true }, + { 205591, true }, + { 205611, true }, + { 205630, true }, + { 205658, true }, + { 205672, true }, + { 205691, true }, + { 205712, true }, + { 205721, true }, + { 205745, false }, { 205764, true }, - { 205775, true }, - { 205790, true }, + { 205778, true }, + { 205796, true }, { 205811, true }, - { 205830, true }, - { 205859, true }, - { 205866, true }, - { 205878, true }, - { 205893, true }, - { 205909, true }, - { 205926, true }, - { 205948, true }, - { 205958, true }, - { 205970, true }, - { 205982, true }, - { 205999, true }, - { 206008, false }, - { 206021, false }, - { 206041, true }, - { 206051, true }, - { 206063, true }, - { 206080, true }, - { 206096, true }, - { 206111, true }, - { 206129, true }, + { 205828, true }, + { 205848, true }, + { 205862, true }, + { 205872, true }, + { 205890, true }, + { 205903, true }, + { 205924, true }, + { 205936, true }, + { 205947, true }, + { 205962, true }, + { 205983, true }, + { 206002, true }, + { 206031, true }, + { 206038, true }, + { 206050, true }, + { 206065, true }, + { 206081, true }, + { 206098, true }, + { 206120, true }, + { 206130, true }, { 206142, true }, - { 206157, true }, - { 206170, true }, - { 206186, true }, - { 206204, true }, - { 206216, true }, + { 206154, true }, + { 206171, true }, + { 206180, false }, + { 206193, false }, + { 206213, true }, + { 206223, true }, { 206235, true }, - { 206249, true }, - { 206262, true }, - { 206273, true }, - { 206293, true }, - { 206304, true }, - { 206323, true }, + { 206252, true }, + { 206268, true }, + { 206283, true }, + { 206301, true }, + { 206314, true }, + { 206329, true }, { 206342, true }, - { 206352, true }, - { 206364, true }, - { 206384, true }, - { 206401, true }, - { 206414, true }, - { 206427, true }, - { 206440, true }, - { 206453, true }, - { 206466, true }, - { 206477, true }, - { 206489, true }, - { 206504, true }, + { 206358, true }, + { 206376, true }, + { 206388, true }, + { 206407, true }, + { 206421, true }, + { 206434, true }, + { 206445, true }, + { 206465, true }, + { 206476, true }, + { 206495, true }, { 206514, true }, - { 206527, true }, - { 206545, true }, - { 206563, true }, - { 206582, true }, - { 206594, true }, - { 206607, true }, + { 206524, true }, + { 206536, true }, + { 206556, true }, + { 206573, true }, + { 206586, true }, + { 206599, true }, + { 206612, true }, { 206625, true }, - { 206647, true }, - { 206660, true }, - { 206677, true }, - { 206697, true }, - { 206713, true }, - { 206741, true }, + { 206638, true }, + { 206649, true }, + { 206661, true }, + { 206676, true }, + { 206686, true }, + { 206699, true }, + { 206717, true }, + { 206735, true }, + { 206754, true }, { 206766, true }, - { 206798, true }, - { 206817, true }, - { 206837, true }, - { 206852, true }, - { 206872, true }, + { 206779, true }, + { 206797, true }, + { 206819, true }, + { 206832, true }, + { 206849, true }, + { 206869, true }, { 206885, true }, - { 206901, true }, - { 206918, true }, - { 206935, true }, - { 206947, true }, - { 206960, true }, - { 206973, true }, - { 206998, true }, - { 207016, true }, - { 207030, true }, - { 207051, true }, - { 207063, true }, - { 207078, true }, - { 207095, true }, + { 206913, true }, + { 206938, true }, + { 206970, true }, + { 206989, true }, + { 207009, true }, + { 207024, true }, + { 207044, true }, + { 207057, true }, + { 207073, true }, + { 207090, true }, { 207107, true }, - { 207122, true }, - { 207133, true }, - { 207147, true }, - { 207166, true }, - { 207183, true }, - { 207198, true }, - { 207208, true }, - { 207220, true }, - { 207240, true }, - { 207254, true }, - { 207264, true }, - { 207277, true }, - { 207296, true }, - { 207310, true }, - { 207324, true }, + { 207119, true }, + { 207132, true }, + { 207145, true }, + { 207170, true }, + { 207188, true }, + { 207202, true }, + { 207223, true }, + { 207235, true }, + { 207250, true }, + { 207267, true }, + { 207279, true }, + { 207294, true }, + { 207305, true }, + { 207319, true }, { 207338, true }, - { 207348, true }, - { 207360, true }, - { 207378, false }, - { 207386, true }, - { 207402, true }, - { 207414, true }, + { 207355, true }, + { 207370, true }, + { 207380, true }, + { 207392, true }, + { 207412, true }, { 207426, true }, - { 207437, true }, + { 207436, true }, { 207449, true }, - { 207458, true }, { 207468, true }, { 207482, true }, { 207496, true }, { 207510, true }, - { 207528, true }, - { 207539, true }, - { 207547, true }, - { 207563, true }, - { 207578, true }, - { 207596, true }, - { 207616, true }, - { 207629, true }, - { 207637, true }, - { 207658, true }, - { 207669, true }, - { 207684, false }, - { 207702, false }, - { 207723, true }, - { 207732, true }, - { 207755, true }, - { 207778, true }, - { 207795, true }, - { 207807, true }, - { 207828, true }, - { 207854, true }, - { 207871, true }, - { 207888, true }, - { 207908, true }, - { 207921, true }, - { 207935, true }, - { 207957, true }, - { 207974, true }, - { 207991, true }, - { 208011, true }, - { 208036, true }, - { 208061, true }, - { 208087, true }, - { 208103, true }, - { 208114, true }, - { 208123, true }, - { 208134, true }, - { 208148, true }, - { 208157, true }, - { 208170, true }, - { 208192, true }, - { 208204, true }, - { 208212, true }, - { 208226, true }, - { 208234, true }, - { 208244, true }, - { 208254, true }, - { 208261, true }, - { 208272, true }, + { 207520, true }, + { 207532, true }, + { 207550, false }, + { 207558, true }, + { 207574, true }, + { 207586, true }, + { 207598, true }, + { 207609, true }, + { 207621, true }, + { 207630, true }, + { 207640, true }, + { 207654, true }, + { 207668, true }, + { 207682, true }, + { 207700, true }, + { 207708, true }, + { 207724, true }, + { 207739, true }, + { 207757, true }, + { 207777, true }, + { 207790, true }, + { 207798, true }, + { 207819, true }, + { 207830, true }, + { 207845, false }, + { 207863, false }, + { 207884, true }, + { 207893, true }, + { 207916, true }, + { 207939, true }, + { 207956, true }, + { 207968, true }, + { 207989, true }, + { 208015, true }, + { 208032, true }, + { 208049, true }, + { 208069, true }, + { 208082, true }, + { 208096, true }, + { 208118, true }, + { 208135, true }, + { 208152, true }, + { 208172, true }, + { 208197, true }, + { 208222, true }, + { 208248, true }, + { 208264, true }, + { 208275, true }, { 208284, true }, - { 208294, true }, - { 208301, true }, - { 208313, true }, - { 208326, true }, - { 208335, true }, - { 208345, true }, - { 208355, true }, - { 208366, true }, - { 208377, true }, - { 208385, true }, - { 208398, true }, - { 208410, true }, - { 208421, true }, - { 208435, true }, - { 208461, false }, - { 208475, true }, - { 208491, true }, - { 208507, true }, - { 208520, true }, - { 208532, true }, - { 208545, true }, - { 208557, true }, - { 208578, true }, - { 208590, true }, - { 208600, true }, - { 208622, true }, - { 208653, true }, - { 208670, true }, - { 208683, true }, - { 208694, false }, - { 208705, true }, - { 208715, true }, - { 208727, true }, + { 208295, true }, + { 208309, true }, + { 208318, true }, + { 208331, true }, + { 208353, true }, + { 208365, true }, + { 208373, true }, + { 208387, true }, + { 208395, true }, + { 208405, true }, + { 208415, true }, + { 208422, true }, + { 208433, true }, + { 208445, true }, + { 208455, true }, + { 208462, true }, + { 208474, true }, + { 208487, true }, + { 208496, true }, + { 208506, true }, + { 208516, true }, + { 208527, true }, + { 208538, true }, + { 208546, true }, + { 208559, true }, + { 208571, true }, + { 208582, true }, + { 208596, true }, + { 208622, false }, + { 208636, true }, + { 208652, true }, + { 208668, true }, + { 208681, true }, + { 208693, true }, + { 208706, true }, + { 208718, true }, { 208739, true }, - { 208753, true }, - { 208764, false }, - { 208777, false }, - { 208797, true }, - { 208807, true }, - { 208815, false }, - { 208824, true }, - { 208837, true }, - { 208895, true }, - { 208941, true }, - { 208995, true }, - { 209042, true }, - { 209091, true }, - { 209136, true }, - { 209186, true }, - { 209240, true }, - { 209286, true }, - { 209333, true }, - { 209387, true }, - { 209414, true }, + { 208751, true }, + { 208761, true }, + { 208783, true }, + { 208814, true }, + { 208831, true }, + { 208844, true }, + { 208855, false }, + { 208866, true }, + { 208876, true }, + { 208888, true }, + { 208900, true }, + { 208914, true }, + { 208925, false }, + { 208938, false }, + { 208958, true }, + { 208968, true }, + { 208976, false }, + { 208985, true }, + { 208998, true }, + { 209056, true }, + { 209102, true }, + { 209156, true }, + { 209203, true }, + { 209252, true }, + { 209297, true }, + { 209347, true }, + { 209401, true }, { 209447, true }, - { 209460, true }, - { 209473, true }, - { 209489, true }, - { 209512, true }, - { 209528, true }, - { 209541, true }, - { 209557, true }, - { 209567, true }, - { 209578, false }, - { 209590, true }, - { 209607, true }, - { 209624, true }, - { 209642, true }, - { 209656, true }, - { 209674, true }, - { 209690, true }, - { 209701, true }, - { 209712, true }, - { 209720, true }, - { 209730, true }, - { 209737, true }, - { 209746, true }, - { 209754, true }, - { 209764, true }, - { 209771, true }, - { 209780, true }, - { 209798, true }, - { 209814, true }, - { 209833, true }, - { 209846, true }, - { 209860, true }, - { 209872, true }, - { 209886, true }, - { 209901, true }, - { 209913, true }, - { 209926, true }, - { 209937, true }, - { 209958, true }, - { 209968, true }, - { 209977, true }, - { 209986, true }, - { 209993, true }, - { 210000, true }, - { 210024, true }, - { 210038, true }, - { 210048, true }, - { 210065, false }, - { 210080, true }, - { 210094, true }, - { 210106, true }, - { 210120, true }, - { 210137, true }, - { 210148, true }, - { 210160, true }, - { 210172, true }, - { 210182, true }, - { 210193, true }, - { 210208, true }, - { 210218, true }, - { 210237, true }, - { 210249, true }, - { 210256, true }, - { 210272, true }, - { 210283, true }, + { 209494, true }, + { 209548, true }, + { 209575, true }, + { 209608, true }, + { 209621, true }, + { 209634, true }, + { 209650, true }, + { 209673, true }, + { 209689, true }, + { 209702, true }, + { 209718, true }, + { 209728, true }, + { 209739, false }, + { 209751, true }, + { 209768, true }, + { 209785, true }, + { 209803, true }, + { 209817, true }, + { 209835, true }, + { 209851, true }, + { 209862, true }, + { 209873, true }, + { 209881, true }, + { 209891, true }, + { 209898, true }, + { 209907, true }, + { 209915, true }, + { 209925, true }, + { 209932, true }, + { 209941, true }, + { 209959, true }, + { 209975, true }, + { 209994, true }, + { 210007, true }, + { 210021, true }, + { 210033, true }, + { 210047, true }, + { 210062, true }, + { 210074, true }, + { 210087, true }, + { 210098, true }, + { 210119, true }, + { 210129, true }, + { 210138, true }, + { 210147, true }, + { 210154, true }, + { 210161, true }, + { 210185, true }, + { 210199, true }, + { 210209, true }, + { 210226, false }, + { 210241, true }, + { 210255, true }, + { 210267, true }, + { 210281, true }, { 210298, true }, + { 210309, true }, { 210321, true }, - { 210328, true }, - { 210338, true }, - { 210349, true }, - { 210359, true }, - { 210371, true }, - { 210387, true }, - { 210394, true }, - { 210401, true }, - { 210413, true }, - { 210424, true }, - { 210434, true }, - { 210446, true }, - { 210456, false }, - { 210476, true }, + { 210333, true }, + { 210343, true }, + { 210354, true }, + { 210369, true }, + { 210379, true }, + { 210398, true }, + { 210410, true }, + { 210417, true }, + { 210433, true }, + { 210444, true }, + { 210459, true }, + { 210482, true }, + { 210489, true }, { 210499, true }, - { 210523, true }, - { 210533, false }, - { 210540, true }, - { 210553, true }, - { 210567, true }, - { 210581, true }, - { 210594, true }, - { 210605, true }, - { 210621, false }, - { 210642, true }, - { 210652, true }, - { 210663, true }, - { 210678, true }, - { 210692, true }, - { 210703, true }, - { 210717, true }, - { 210737, true }, - { 210751, true }, - { 210760, true }, - { 210771, true }, - { 210786, true }, - { 210799, true }, - { 210814, true }, - { 210830, true }, - { 210844, true }, - { 210859, true }, - { 210873, true }, - { 210889, true }, - { 210903, true }, - { 210917, true }, - { 210935, true }, - { 210953, true }, - { 210973, true }, - { 210992, true }, - { 211008, true }, - { 211023, true }, - { 211037, true }, - { 211057, true }, - { 211073, true }, - { 211088, true }, - { 211102, true }, - { 211133, true }, - { 211149, true }, - { 211160, true }, - { 211170, false }, - { 211194, true }, - { 211208, true }, - { 211222, true }, - { 211232, true }, + { 210510, true }, + { 210520, true }, + { 210532, true }, + { 210548, true }, + { 210555, true }, + { 210562, true }, + { 210574, true }, + { 210585, true }, + { 210595, true }, + { 210607, true }, + { 210617, false }, + { 210637, true }, + { 210660, true }, + { 210684, true }, + { 210694, false }, + { 210701, true }, + { 210714, true }, + { 210728, true }, + { 210742, true }, + { 210755, true }, + { 210766, true }, + { 210782, false }, + { 210803, true }, + { 210813, true }, + { 210824, true }, + { 210839, true }, + { 210853, true }, + { 210864, true }, + { 210878, true }, + { 210898, true }, + { 210912, true }, + { 210921, true }, + { 210932, true }, + { 210947, true }, + { 210960, true }, + { 210975, true }, + { 210991, true }, + { 211005, true }, + { 211020, true }, + { 211034, true }, + { 211050, true }, + { 211064, true }, + { 211078, true }, + { 211096, true }, + { 211114, true }, + { 211134, true }, + { 211153, true }, + { 211169, true }, + { 211184, true }, + { 211198, true }, + { 211218, true }, + { 211234, true }, { 211249, true }, - { 211262, true }, - { 211275, true }, - { 211292, true }, - { 211309, false }, - { 211326, true }, - { 211339, true }, - { 211356, true }, - { 211377, true }, - { 211390, true }, - { 211403, true }, + { 211263, true }, + { 211294, true }, + { 211310, true }, + { 211321, true }, + { 211331, false }, + { 211355, true }, + { 211369, true }, + { 211383, true }, + { 211393, true }, + { 211410, true }, { 211423, true }, - { 211441, true }, - { 211451, true }, - { 211464, true }, - { 211478, true }, - { 211492, false }, - { 211503, true }, - { 211520, true }, - { 211534, true }, - { 211553, true }, - { 211576, true }, - { 211604, true }, - { 211620, true }, - { 211632, true }, - { 211646, false }, - { 211659, true }, - { 211673, true }, - { 211683, true }, - { 211692, true }, - { 211704, false }, - { 211720, true }, - { 211733, true }, - { 211746, true }, - { 211762, true }, - { 211772, true }, - { 211787, true }, - { 211795, true }, - { 211806, true }, - { 211821, true }, - { 211838, true }, - { 211845, true }, - { 211855, true }, - { 211865, true }, - { 211886, true }, - { 211902, true }, - { 211921, true }, - { 211941, true }, + { 211436, true }, + { 211453, true }, + { 211470, false }, + { 211487, true }, + { 211500, true }, + { 211517, true }, + { 211538, true }, + { 211551, true }, + { 211564, true }, + { 211584, true }, + { 211602, true }, + { 211612, true }, + { 211625, true }, + { 211639, true }, + { 211653, false }, + { 211664, true }, + { 211681, true }, + { 211695, true }, + { 211714, true }, + { 211737, true }, + { 211765, true }, + { 211781, true }, + { 211793, true }, + { 211807, false }, + { 211820, true }, + { 211834, true }, + { 211844, true }, + { 211853, true }, + { 211865, false }, + { 211881, true }, + { 211894, true }, + { 211907, true }, + { 211923, true }, + { 211933, true }, + { 211948, true }, { 211956, true }, - { 211964, true }, - { 211983, true }, - { 211994, true }, - { 212010, true }, - { 212025, true }, - { 212033, true }, - { 212044, true }, - { 212057, true }, - { 212068, true }, - { 212083, false }, - { 212103, true }, - { 212118, true }, - { 212140, true }, - { 212150, true }, - { 212165, true }, - { 212178, true }, - { 212189, true }, - { 212199, true }, - { 212211, true }, - { 212235, true }, - { 212248, true }, - { 212261, true }, - { 212273, true }, - { 212286, true }, - { 212300, true }, - { 212316, true }, - { 212332, true }, - { 212348, true }, - { 212367, true }, - { 212387, true }, - { 212398, true }, - { 212408, true }, - { 212419, true }, - { 212427, false }, + { 211967, true }, + { 211982, true }, + { 211999, true }, + { 212006, true }, + { 212016, true }, + { 212026, true }, + { 212047, true }, + { 212063, true }, + { 212082, true }, + { 212102, true }, + { 212117, true }, + { 212125, true }, + { 212144, true }, + { 212155, true }, + { 212171, true }, + { 212186, true }, + { 212194, true }, + { 212205, true }, + { 212218, true }, + { 212229, true }, + { 212244, false }, + { 212264, true }, + { 212279, true }, + { 212301, true }, + { 212311, true }, + { 212326, true }, + { 212339, true }, + { 212350, true }, + { 212360, true }, + { 212372, true }, + { 212396, true }, + { 212409, true }, + { 212422, true }, { 212434, true }, { 212447, true }, - { 212457, true }, - { 212471, true }, - { 212486, true }, - { 212496, true }, - { 212514, true }, + { 212461, true }, + { 212477, true }, + { 212493, true }, + { 212509, true }, { 212528, true }, - { 212540, true }, - { 212567, false }, - { 212576, true }, - { 212589, false }, - { 212612, true }, - { 212623, true }, - { 212636, true }, - { 212643, true }, - { 212650, true }, - { 212661, true }, - { 212677, true }, - { 212690, true }, - { 212702, true }, - { 212712, true }, - { 212729, true }, - { 212744, true }, - { 212753, true }, - { 212764, true }, - { 212775, true }, - { 212793, true }, - { 212807, true }, - { 212819, false }, - { 212828, true }, + { 212548, true }, + { 212559, true }, + { 212569, true }, + { 212580, true }, + { 212588, false }, + { 212595, true }, + { 212608, true }, + { 212618, true }, + { 212632, true }, + { 212647, true }, + { 212657, true }, + { 212675, true }, + { 212689, true }, + { 212701, true }, + { 212728, false }, + { 212737, true }, + { 212750, false }, + { 212773, true }, + { 212784, true }, + { 212797, true }, + { 212804, true }, + { 212811, true }, + { 212822, true }, { 212838, true }, - { 212850, true }, - { 212862, true }, - { 212875, true }, - { 212891, true }, - { 212910, true }, - { 212929, true }, - { 212944, true }, + { 212851, true }, + { 212863, true }, + { 212873, true }, + { 212890, true }, + { 212905, true }, + { 212914, true }, + { 212925, true }, + { 212936, true }, { 212954, true }, - { 212972, true }, - { 212984, true }, - { 213003, false }, - { 213018, true }, - { 213030, true }, - { 213045, true }, - { 213054, true }, - { 213065, false }, - { 213075, true }, - { 213084, true }, - { 213093, true }, - { 213101, true }, - { 213120, true }, + { 212968, true }, + { 212980, false }, + { 212989, true }, + { 212999, true }, + { 213011, true }, + { 213023, true }, + { 213036, true }, + { 213052, true }, + { 213071, true }, + { 213090, true }, + { 213105, true }, + { 213115, true }, { 213133, true }, - { 213142, true }, - { 213156, true }, - { 213174, true }, - { 213186, true }, - { 213196, true }, - { 213220, true }, - { 213243, true }, - { 213263, true }, - { 213276, true }, - { 213292, true }, - { 213304, true }, - { 213318, true }, - { 213337, true }, + { 213145, true }, + { 213164, false }, + { 213179, true }, + { 213191, true }, + { 213206, true }, + { 213215, true }, + { 213226, false }, + { 213236, true }, + { 213245, true }, + { 213254, true }, + { 213262, true }, + { 213281, true }, + { 213294, true }, + { 213303, true }, + { 213317, true }, + { 213335, true }, { 213347, true }, - { 213369, true }, - { 213382, true }, - { 213391, true }, - { 213402, true }, - { 213415, true }, - { 213426, true }, - { 213440, true }, - { 213455, true }, - { 213469, true }, - { 213484, true }, - { 213507, false }, - { 213520, true }, - { 213532, true }, - { 213547, true }, - { 213556, true }, - { 213568, true }, - { 213578, true }, - { 213592, true }, - { 213605, true }, - { 213618, true }, - { 213637, true }, - { 213651, true }, - { 213663, true }, - { 213675, true }, - { 213691, true }, - { 213709, true }, - { 213735, true }, - { 213753, false }, + { 213357, true }, + { 213381, true }, + { 213404, true }, + { 213424, true }, + { 213437, true }, + { 213453, true }, + { 213465, true }, + { 213479, true }, + { 213498, true }, + { 213508, true }, + { 213530, true }, + { 213543, true }, + { 213552, true }, + { 213563, true }, + { 213576, true }, + { 213587, true }, + { 213601, true }, + { 213616, true }, + { 213630, true }, + { 213645, true }, + { 213668, false }, + { 213681, true }, + { 213693, true }, + { 213708, true }, + { 213717, true }, + { 213729, true }, + { 213739, true }, + { 213753, true }, { 213766, true }, - { 213784, true }, - { 213794, true }, - { 213804, true }, - { 213815, true }, - { 213830, true }, - { 213842, true }, - { 213858, true }, - { 213866, true }, - { 213876, true }, - { 213886, true }, + { 213779, true }, + { 213798, true }, + { 213812, true }, + { 213824, true }, + { 213836, true }, + { 213852, true }, + { 213870, true }, { 213896, true }, - { 213906, true }, - { 213916, true }, + { 213914, false }, { 213927, true }, - { 213947, true }, - { 213955, false }, + { 213945, true }, + { 213955, true }, + { 213965, true }, { 213976, true }, - { 213989, true }, - { 213998, true }, - { 214012, true }, - { 214022, true }, - { 214035, true }, - { 214045, true }, - { 214054, true }, - { 214070, true }, - { 214081, false }, - { 214101, true }, - { 214111, true }, - { 214118, true }, - { 214128, true }, - { 214138, true }, - { 214153, true }, - { 214167, true }, - { 214184, true }, - { 214201, true }, - { 214221, true }, - { 214234, true }, - { 214250, true }, - { 214280, true }, - { 214306, true }, - { 214314, true }, - { 214333, true }, - { 214347, true }, - { 214356, true }, - { 214375, true }, - { 214385, true }, - { 214406, true }, - { 214421, true }, - { 214434, true }, - { 214450, true }, - { 214462, true }, + { 213991, true }, + { 214003, true }, + { 214019, true }, + { 214027, true }, + { 214037, true }, + { 214047, true }, + { 214057, true }, + { 214069, true }, + { 214079, true }, + { 214089, true }, + { 214100, true }, + { 214120, true }, + { 214128, false }, + { 214149, true }, + { 214162, true }, + { 214171, true }, + { 214185, true }, + { 214195, true }, + { 214208, true }, + { 214218, true }, + { 214227, true }, + { 214243, true }, + { 214254, false }, + { 214274, true }, + { 214284, true }, + { 214291, true }, + { 214301, true }, + { 214311, true }, + { 214326, true }, + { 214340, true }, + { 214357, true }, + { 214374, true }, + { 214394, true }, + { 214407, true }, + { 214423, true }, + { 214453, true }, { 214479, true }, - { 214490, true }, - { 214507, true }, - { 214525, true }, - { 214541, true }, - { 214561, true }, - { 214583, true }, - { 214596, true }, - { 214606, true }, - { 214628, true }, - { 214649, true }, - { 214670, true }, - { 214683, true }, - { 214707, true }, - { 214718, true }, - { 214730, true }, - { 214742, true }, - { 214752, true }, - { 214770, true }, - { 214782, false }, - { 214799, true }, - { 214831, true }, - { 214842, true }, - { 214852, true }, - { 214865, true }, - { 214874, true }, - { 214887, true }, - { 214898, true }, - { 214909, true }, - { 214919, true }, - { 214926, true }, - { 214938, true }, - { 214951, false }, - { 214963, true }, - { 214983, true }, - { 214996, true }, - { 215006, true }, - { 215019, true }, - { 215040, true }, - { 215057, true }, + { 214487, true }, + { 214506, true }, + { 214520, true }, + { 214529, true }, + { 214548, true }, + { 214558, true }, + { 214579, true }, + { 214594, true }, + { 214607, true }, + { 214623, true }, + { 214635, true }, + { 214652, true }, + { 214663, true }, + { 214680, true }, + { 214698, true }, + { 214714, true }, + { 214734, true }, + { 214756, true }, + { 214769, true }, + { 214779, true }, + { 214801, true }, + { 214822, true }, + { 214843, true }, + { 214856, true }, + { 214880, true }, + { 214891, true }, + { 214903, true }, + { 214915, true }, + { 214925, true }, + { 214943, true }, + { 214955, false }, + { 214972, true }, + { 215004, true }, + { 215015, true }, + { 215025, true }, + { 215038, true }, + { 215047, true }, + { 215060, true }, { 215071, true }, - { 215088, true }, - { 215106, true }, - { 215113, true }, - { 215131, false }, - { 215149, false }, - { 215167, false }, - { 215184, true }, - { 215206, true }, - { 215219, true }, - { 215232, false }, - { 215247, false }, - { 215257, false }, - { 215271, true }, + { 215082, true }, + { 215092, true }, + { 215099, true }, + { 215111, true }, + { 215124, false }, + { 215136, true }, + { 215156, true }, + { 215169, true }, + { 215179, true }, + { 215192, true }, + { 215213, true }, + { 215230, true }, + { 215244, true }, + { 215261, true }, + { 215279, true }, { 215286, true }, - { 215298, true }, - { 215316, true }, - { 215331, true }, - { 215356, true }, - { 215374, true }, - { 215390, true }, - { 215400, true }, - { 215428, true }, - { 215443, true }, - { 215454, true }, - { 215477, false }, - { 215495, true }, - { 215510, true }, - { 215522, true }, - { 215535, true }, - { 215564, true }, - { 215582, true }, + { 215304, false }, + { 215322, false }, + { 215340, false }, + { 215357, true }, + { 215379, true }, + { 215392, true }, + { 215405, false }, + { 215420, false }, + { 215430, false }, + { 215444, true }, + { 215459, true }, + { 215471, true }, + { 215489, true }, + { 215504, true }, + { 215529, true }, + { 215547, true }, + { 215563, true }, + { 215573, true }, { 215601, true }, - { 215618, true }, - { 215628, true }, - { 215639, true }, + { 215616, true }, + { 215627, true }, { 215650, false }, - { 215665, true }, - { 215680, true }, - { 215698, true }, - { 215712, true }, - { 215727, true }, - { 215739, true }, - { 215762, true }, - { 215776, true }, + { 215668, true }, + { 215683, true }, + { 215695, true }, + { 215708, true }, + { 215737, true }, + { 215755, true }, + { 215774, true }, + { 215791, true }, { 215801, true }, - { 215817, true }, - { 215841, true }, - { 215855, true }, - { 215866, true }, - { 215884, true }, - { 215908, true }, - { 215941, false }, - { 215964, true }, - { 215984, true }, - { 216001, true }, - { 216019, true }, + { 215812, true }, + { 215823, false }, + { 215838, true }, + { 215853, true }, + { 215871, true }, + { 215885, true }, + { 215900, true }, + { 215912, true }, + { 215935, true }, + { 215949, true }, + { 215974, true }, + { 215990, true }, + { 216014, true }, + { 216028, true }, { 216039, true }, - { 216049, true }, - { 216062, true }, - { 216075, true }, - { 216092, true }, - { 216103, true }, - { 216114, true }, - { 216136, true }, - { 216154, false }, - { 216168, true }, - { 216182, true }, - { 216200, true }, - { 216220, true }, - { 216234, true }, - { 216243, true }, - { 216259, true }, - { 216277, true }, - { 216289, true }, - { 216304, true }, - { 216316, true }, - { 216328, true }, - { 216339, true }, - { 216350, true }, - { 216359, true }, - { 216372, true }, - { 216386, true }, - { 216397, true }, - { 216411, true }, - { 216422, true }, - { 216435, true }, - { 216449, true }, - { 216459, false }, - { 216472, true }, - { 216481, true }, - { 216498, true }, - { 216508, true }, - { 216518, true }, - { 216531, true }, - { 216540, true }, - { 216550, true }, - { 216561, true }, - { 216569, true }, - { 216577, false }, - { 216591, true }, - { 216599, false }, - { 216619, true }, - { 216629, true }, - { 216643, true }, - { 216657, true }, - { 216667, true }, - { 216678, true }, - { 216690, true }, - { 216702, true }, - { 216712, true }, - { 216721, true }, + { 216057, true }, + { 216081, true }, + { 216114, false }, + { 216137, true }, + { 216157, true }, + { 216174, true }, + { 216192, true }, + { 216212, true }, + { 216222, true }, + { 216235, true }, + { 216248, true }, + { 216265, true }, + { 216276, true }, + { 216287, true }, + { 216309, true }, + { 216327, false }, + { 216341, true }, + { 216355, true }, + { 216373, true }, + { 216393, true }, + { 216407, true }, + { 216416, true }, + { 216432, true }, + { 216450, true }, + { 216462, true }, + { 216477, true }, + { 216489, true }, + { 216501, true }, + { 216512, true }, + { 216523, true }, + { 216532, true }, + { 216545, true }, + { 216559, true }, + { 216570, true }, + { 216584, true }, + { 216595, true }, + { 216608, true }, + { 216622, true }, + { 216632, false }, + { 216645, true }, + { 216654, true }, + { 216671, true }, + { 216681, true }, + { 216691, true }, + { 216704, true }, + { 216713, true }, + { 216723, true }, { 216734, true }, - { 216746, true }, - { 216758, true }, - { 216769, true }, - { 216783, false }, - { 216799, true }, - { 216811, true }, - { 216827, true }, - { 216842, true }, - { 216856, true }, - { 216865, true }, - { 216877, true }, - { 216887, true }, - { 216903, true }, - { 216918, true }, - { 216933, true }, - { 216949, true }, - { 216964, true }, - { 216986, true }, - { 216998, true }, - { 217005, true }, - { 217020, true }, - { 217031, true }, - { 217041, true }, - { 217056, true }, + { 216744, true }, + { 216752, true }, + { 216760, false }, + { 216774, true }, + { 216782, false }, + { 216802, true }, + { 216812, true }, + { 216826, true }, + { 216840, true }, + { 216850, true }, + { 216861, true }, + { 216873, true }, + { 216885, true }, + { 216895, true }, + { 216904, true }, + { 216917, true }, + { 216929, true }, + { 216941, true }, + { 216952, true }, + { 216966, false }, + { 216982, true }, + { 216994, true }, + { 217010, true }, + { 217025, true }, + { 217039, true }, + { 217048, true }, + { 217060, true }, { 217070, true }, - { 217084, true }, - { 217095, true }, - { 217108, true }, - { 217119, false }, - { 217134, true }, - { 217150, true }, - { 217159, true }, + { 217086, true }, + { 217101, true }, + { 217116, true }, + { 217132, true }, + { 217147, true }, { 217169, true }, - { 217176, true }, - { 217187, true }, - { 217199, true }, - { 217221, true }, - { 217233, true }, - { 217247, true }, - { 217270, true }, - { 217305, true }, - { 217341, true }, - { 217374, true }, - { 217412, true }, - { 217447, true }, - { 217482, true }, - { 217522, true }, - { 217558, true }, - { 217601, true }, - { 217627, true }, - { 217640, true }, - { 217649, true }, - { 217659, true }, - { 217669, true }, - { 217696, true }, + { 217181, true }, + { 217188, true }, + { 217203, true }, + { 217214, true }, + { 217224, true }, + { 217239, true }, + { 217253, true }, + { 217267, true }, + { 217278, true }, + { 217291, true }, + { 217302, false }, + { 217317, true }, + { 217333, true }, + { 217342, true }, + { 217352, true }, + { 217359, true }, + { 217370, true }, + { 217382, true }, + { 217404, true }, + { 217416, true }, + { 217430, true }, + { 217453, true }, + { 217488, true }, + { 217524, true }, + { 217557, true }, + { 217595, true }, + { 217630, true }, + { 217665, true }, { 217705, true }, - { 217714, true }, - { 217731, true }, - { 217748, true }, - { 217760, true }, - { 217773, true }, - { 217786, true }, - { 217813, true }, - { 217820, true }, - { 217831, true }, - { 217848, true }, - { 217864, true }, - { 217875, true }, - { 217887, true }, - { 217900, true }, - { 217924, true }, - { 217936, true }, + { 217741, true }, + { 217784, true }, + { 217810, true }, + { 217823, true }, + { 217832, true }, + { 217842, true }, + { 217852, true }, + { 217879, true }, + { 217888, true }, + { 217897, true }, + { 217914, true }, + { 217931, true }, { 217943, true }, - { 217954, true }, - { 217962, true }, - { 217972, true }, - { 217979, true }, - { 217999, true }, - { 218011, true }, - { 218022, true }, - { 218034, true }, - { 218044, true }, - { 218056, true }, - { 218078, true }, - { 218087, true }, - { 218095, true }, - { 218104, true }, - { 218113, true }, - { 218132, true }, - { 218146, true }, - { 218167, true }, - { 218180, true }, - { 218192, true }, - { 218216, true }, - { 218228, true }, - { 218246, true }, - { 218264, false }, + { 217956, true }, + { 217969, true }, + { 217996, true }, + { 218003, true }, + { 218014, true }, + { 218031, true }, + { 218047, true }, + { 218058, true }, + { 218070, true }, + { 218083, true }, + { 218107, true }, + { 218119, true }, + { 218126, true }, + { 218137, true }, + { 218145, true }, + { 218155, true }, + { 218162, true }, + { 218182, true }, + { 218194, true }, + { 218205, true }, + { 218217, true }, + { 218227, true }, + { 218239, true }, + { 218261, true }, + { 218270, true }, { 218278, true }, - { 218293, true }, - { 218308, true }, - { 218317, false }, - { 218334, true }, - { 218344, true }, - { 218358, true }, - { 218366, true }, - { 218377, true }, - { 218392, true }, - { 218408, true }, - { 218424, true }, - { 218447, true }, - { 218457, true }, - { 218468, true }, - { 218478, true }, - { 218494, true }, - { 218505, true }, - { 218516, true }, - { 218528, true }, - { 218539, true }, - { 218553, true }, - { 218570, false }, - { 218586, true }, - { 218602, true }, - { 218614, false }, - { 218633, true }, - { 218643, true }, + { 218287, true }, + { 218296, true }, + { 218315, true }, + { 218329, true }, + { 218350, true }, + { 218363, true }, + { 218375, true }, + { 218399, true }, + { 218411, true }, + { 218429, true }, + { 218447, false }, + { 218461, true }, + { 218476, true }, + { 218491, true }, + { 218500, false }, + { 218517, true }, + { 218527, true }, + { 218541, true }, + { 218549, true }, + { 218560, true }, + { 218575, true }, + { 218591, true }, + { 218607, true }, + { 218630, true }, + { 218640, true }, + { 218651, true }, { 218661, true }, - { 218676, true }, + { 218677, true }, + { 218688, true }, { 218699, true }, - { 218710, true }, - { 218727, true }, - { 218737, true }, - { 218753, true }, - { 218772, true }, - { 218787, true }, - { 218803, true }, - { 218820, true }, - { 218840, true }, - { 218852, true }, - { 218867, true }, - { 218886, true }, - { 218895, true }, - { 218911, true }, - { 218928, true }, - { 218940, true }, - { 218952, true }, - { 218964, true }, - { 218973, true }, - { 218983, true }, - { 219000, true }, - { 219018, true }, - { 219029, true }, - { 219037, true }, - { 219047, true }, - { 219062, true }, - { 219072, true }, - { 219082, false }, - { 219089, true }, - { 219099, true }, - { 219120, true }, - { 219140, true }, - { 219163, true }, + { 218711, true }, + { 218722, true }, + { 218736, true }, + { 218753, false }, + { 218769, true }, + { 218785, true }, + { 218797, false }, + { 218816, true }, + { 218826, true }, + { 218844, true }, + { 218859, true }, + { 218882, true }, + { 218893, true }, + { 218910, true }, + { 218920, true }, + { 218936, true }, + { 218955, true }, + { 218970, true }, + { 218986, true }, + { 219003, true }, + { 219023, true }, + { 219035, true }, + { 219050, true }, + { 219069, true }, + { 219078, true }, + { 219094, true }, + { 219111, true }, + { 219123, true }, + { 219135, true }, + { 219147, true }, + { 219156, true }, + { 219166, true }, { 219183, true }, - { 219199, true }, - { 219214, true }, - { 219232, true }, - { 219243, false }, - { 219267, true }, - { 219286, true }, - { 219299, true }, - { 219315, true }, - { 219329, true }, - { 219341, false }, - { 219355, false }, - { 219368, true }, + { 219201, true }, + { 219212, true }, + { 219220, true }, + { 219230, true }, + { 219245, true }, + { 219255, true }, + { 219265, false }, + { 219272, true }, + { 219282, true }, + { 219303, true }, + { 219323, true }, + { 219346, true }, + { 219366, true }, { 219382, true }, - { 219400, true }, - { 219423, true }, - { 219446, true }, - { 219459, true }, - { 219471, true }, + { 219397, true }, + { 219415, true }, + { 219426, false }, + { 219450, true }, + { 219469, true }, { 219482, true }, - { 219493, true }, - { 219508, true }, - { 219522, true }, - { 219547, true }, - { 219580, true }, + { 219498, true }, + { 219512, true }, + { 219524, false }, + { 219538, false }, + { 219551, true }, + { 219565, true }, + { 219583, true }, { 219606, true }, - { 219640, true }, - { 219663, true }, + { 219629, true }, + { 219642, true }, + { 219654, true }, + { 219665, true }, { 219676, true }, - { 219692, true }, - { 219704, true }, - { 219716, true }, - { 219732, false }, - { 219752, true }, - { 219765, false }, - { 219783, false }, - { 219806, true }, - { 219826, true }, - { 219842, true }, - { 219856, true }, - { 219877, true }, - { 219892, false }, - { 219905, true }, - { 219922, true }, - { 219936, true }, - { 219949, true }, - { 219961, true }, - { 219973, true }, + { 219691, true }, + { 219705, true }, + { 219730, true }, + { 219763, true }, + { 219789, true }, + { 219823, true }, + { 219846, true }, + { 219859, true }, + { 219875, true }, + { 219887, true }, + { 219899, true }, + { 219915, false }, + { 219935, true }, + { 219948, false }, + { 219966, false }, { 219989, true }, - { 220004, false }, - { 220026, true }, - { 220046, true }, - { 220067, true }, - { 220083, false }, - { 220095, true }, - { 220111, true }, - { 220129, true }, - { 220141, true }, - { 220155, true }, - { 220169, true }, - { 220186, true }, - { 220203, true }, - { 220217, true }, - { 220227, false }, - { 220241, true }, - { 220251, true }, - { 220272, true }, - { 220285, true }, - { 220303, true }, - { 220319, true }, - { 220332, true }, - { 220343, true }, - { 220356, true }, - { 220377, true }, - { 220388, true }, - { 220408, true }, - { 220425, true }, - { 220437, true }, - { 220451, true }, - { 220461, true }, - { 220478, true }, - { 220488, true }, - { 220497, true }, + { 220009, true }, + { 220025, true }, + { 220039, true }, + { 220060, true }, + { 220075, false }, + { 220088, true }, + { 220105, true }, + { 220119, true }, + { 220132, true }, + { 220144, true }, + { 220156, true }, + { 220172, true }, + { 220187, false }, + { 220209, true }, + { 220229, true }, + { 220250, true }, + { 220266, false }, + { 220278, true }, + { 220294, true }, + { 220312, true }, + { 220324, true }, + { 220338, true }, + { 220352, true }, + { 220369, true }, + { 220386, true }, + { 220400, true }, + { 220410, false }, + { 220424, true }, + { 220434, true }, + { 220455, true }, + { 220468, true }, + { 220486, true }, + { 220502, true }, { 220515, true }, - { 220523, true }, + { 220526, true }, { 220539, true }, - { 220555, true }, + { 220560, true }, { 220571, true }, - { 220592, true }, - { 220605, true }, - { 220630, true }, - { 220645, true }, - { 220665, true }, - { 220679, true }, - { 220694, true }, - { 220716, true }, - { 220736, true }, - { 220751, true }, - { 220761, true }, - { 220774, true }, - { 220792, true }, - { 220807, true }, - { 220823, true }, - { 220839, true }, - { 220855, true }, - { 220866, true }, - { 220875, false }, - { 220885, true }, - { 220897, true }, - { 220914, true }, - { 220926, true }, - { 220942, true }, - { 220958, true }, + { 220591, true }, + { 220608, true }, + { 220620, true }, + { 220634, true }, + { 220644, true }, + { 220661, true }, + { 220671, true }, + { 220680, true }, + { 220698, true }, + { 220706, true }, + { 220722, true }, + { 220738, true }, + { 220754, true }, + { 220775, true }, + { 220788, true }, + { 220813, true }, + { 220828, true }, + { 220848, true }, + { 220862, true }, + { 220877, true }, + { 220899, true }, + { 220919, true }, + { 220934, true }, + { 220944, true }, + { 220957, true }, { 220975, true }, - { 220996, true }, - { 221008, true }, - { 221020, true }, - { 221039, false }, - { 221051, true }, - { 221063, true }, - { 221073, true }, - { 221088, true }, - { 221100, true }, - { 221114, true }, - { 221138, true }, - { 221150, true }, - { 221182, true }, + { 220990, true }, + { 221006, true }, + { 221022, true }, + { 221038, true }, + { 221049, true }, + { 221058, false }, + { 221068, true }, + { 221080, true }, + { 221097, true }, + { 221109, true }, + { 221125, true }, + { 221141, true }, + { 221158, true }, + { 221179, true }, + { 221191, true }, { 221203, true }, + { 221222, false }, { 221234, true }, - { 221259, true }, - { 221282, true }, - { 221293, true }, - { 221305, true }, - { 221320, true }, + { 221246, true }, + { 221256, true }, + { 221271, true }, + { 221283, true }, + { 221297, true }, + { 221321, true }, { 221333, true }, - { 221346, true }, - { 221359, true }, - { 221369, true }, - { 221398, true }, - { 221421, true }, - { 221445, true }, - { 221472, true }, - { 221486, true }, - { 221509, true }, - { 221535, true }, - { 221563, true }, - { 221594, true }, - { 221619, true }, - { 221627, true }, - { 221634, true }, - { 221646, true }, - { 221654, true }, - { 221666, true }, - { 221688, true }, - { 221701, true }, - { 221722, true }, - { 221735, true }, - { 221756, true }, - { 221775, true }, - { 221796, true }, - { 221815, true }, - { 221826, true }, - { 221839, true }, - { 221855, false }, + { 221365, true }, + { 221386, true }, + { 221417, true }, + { 221442, true }, + { 221465, true }, + { 221476, true }, + { 221488, true }, + { 221503, true }, + { 221516, true }, + { 221529, true }, + { 221542, true }, + { 221552, true }, + { 221581, true }, + { 221604, true }, + { 221628, true }, + { 221655, true }, + { 221669, true }, + { 221692, true }, + { 221718, true }, + { 221746, true }, + { 221777, true }, + { 221802, true }, + { 221810, true }, + { 221817, true }, + { 221829, true }, + { 221837, true }, + { 221849, true }, { 221871, true }, - { 221879, true }, - { 221894, true }, - { 221911, false }, - { 221926, true }, - { 221942, true }, - { 221952, true }, - { 221964, true }, - { 221980, true }, - { 221994, false }, - { 222003, true }, - { 222015, true }, - { 222028, true }, - { 222046, true }, - { 222061, true }, - { 222083, true }, - { 222100, true }, - { 222122, true }, - { 222144, true }, - { 222158, true }, - { 222172, true }, - { 222179, true }, - { 222192, true }, - { 222205, true }, - { 222231, true }, - { 222243, true }, - { 222254, true }, - { 222280, true }, - { 222290, true }, - { 222300, false }, - { 222317, true }, - { 222329, true }, - { 222338, true }, - { 222351, true }, - { 222361, true }, + { 221884, true }, + { 221905, true }, + { 221918, true }, + { 221939, true }, + { 221958, true }, + { 221979, true }, + { 221998, true }, + { 222009, true }, + { 222022, true }, + { 222038, false }, + { 222054, true }, + { 222062, true }, + { 222077, true }, + { 222094, false }, + { 222109, true }, + { 222125, true }, + { 222135, true }, + { 222147, true }, + { 222163, true }, + { 222177, false }, + { 222186, true }, + { 222198, true }, + { 222211, true }, + { 222229, true }, + { 222244, true }, + { 222266, true }, + { 222283, true }, + { 222305, true }, + { 222327, true }, + { 222341, true }, + { 222355, true }, + { 222362, true }, { 222375, true }, - { 222392, true }, - { 222405, true }, - { 222417, true }, - { 222428, true }, - { 222438, true }, - { 222451, false }, - { 222467, true }, - { 222483, true }, - { 222497, true }, - { 222510, false }, - { 222527, true }, - { 222541, true }, - { 222555, true }, - { 222569, true }, - { 222593, true }, - { 222606, true }, - { 222619, true }, - { 222633, true }, - { 222647, true }, - { 222662, true }, - { 222678, true }, - { 222693, true }, - { 222708, true }, - { 222726, true }, - { 222749, true }, - { 222761, true }, - { 222773, true }, - { 222792, true }, - { 222808, true }, - { 222823, true }, - { 222847, true }, - { 222864, true }, - { 222882, true }, - { 222901, true }, - { 222921, true }, - { 222936, true }, - { 222948, true }, - { 222965, true }, - { 222979, true }, - { 222996, true }, - { 223005, true }, - { 223018, true }, - { 223032, true }, + { 222388, true }, + { 222414, true }, + { 222426, true }, + { 222437, true }, + { 222463, true }, + { 222473, true }, + { 222483, false }, + { 222500, true }, + { 222512, true }, + { 222521, true }, + { 222534, true }, + { 222544, true }, + { 222558, true }, + { 222575, true }, + { 222588, true }, + { 222600, true }, + { 222611, true }, + { 222621, true }, + { 222634, false }, + { 222650, true }, + { 222666, true }, + { 222680, true }, + { 222693, false }, + { 222710, true }, + { 222724, true }, + { 222738, true }, + { 222752, true }, + { 222776, true }, + { 222789, true }, + { 222802, true }, + { 222816, true }, + { 222830, true }, + { 222845, true }, + { 222861, true }, + { 222876, true }, + { 222891, true }, + { 222909, true }, + { 222932, true }, + { 222944, true }, + { 222956, true }, + { 222975, true }, + { 222991, true }, + { 223006, true }, + { 223030, true }, { 223047, true }, - { 223059, false }, - { 223072, true }, - { 223083, true }, + { 223065, true }, + { 223084, true }, { 223104, true }, - { 223118, true }, + { 223119, true }, { 223131, true }, - { 223143, true }, - { 223155, false }, - { 223174, true }, - { 223196, true }, - { 223211, true }, + { 223148, true }, + { 223162, true }, + { 223179, true }, + { 223188, true }, + { 223201, true }, + { 223215, true }, { 223230, true }, - { 223244, false }, + { 223242, false }, { 223255, true }, - { 223270, true }, - { 223286, true }, - { 223300, true }, - { 223312, true }, - { 223329, true }, - { 223347, true }, - { 223358, true }, - { 223365, true }, - { 223377, true }, - { 223385, true }, - { 223395, true }, - { 223405, true }, - { 223420, true }, - { 223439, true }, - { 223455, false }, - { 223465, true }, - { 223472, false }, - { 223484, true }, - { 223493, true }, - { 223507, true }, - { 223519, true }, - { 223527, true }, - { 223534, true }, - { 223544, true }, - { 223556, true }, - { 223567, true }, - { 223586, true }, - { 223594, true }, - { 223602, false }, - { 223614, true }, - { 223627, true }, - { 223642, true }, - { 223664, true }, - { 223678, true }, + { 223266, true }, + { 223287, true }, + { 223301, true }, + { 223314, true }, + { 223326, true }, + { 223338, false }, + { 223357, true }, + { 223379, true }, + { 223394, true }, + { 223413, true }, + { 223427, false }, + { 223438, true }, + { 223453, true }, + { 223469, true }, + { 223483, true }, + { 223495, true }, + { 223512, true }, + { 223530, true }, + { 223541, true }, + { 223548, true }, + { 223560, true }, + { 223568, true }, + { 223578, true }, + { 223588, true }, + { 223603, true }, + { 223622, true }, + { 223638, false }, + { 223648, true }, + { 223655, false }, + { 223667, true }, + { 223676, true }, { 223690, true }, - { 223708, true }, - { 223724, true }, - { 223733, false }, + { 223702, true }, + { 223710, true }, + { 223717, true }, + { 223727, true }, + { 223739, true }, { 223750, true }, - { 223771, true }, - { 223792, true }, - { 223804, true }, - { 223820, true }, - { 223845, true }, - { 223871, true }, - { 223897, true }, - { 223908, true }, - { 223920, true }, + { 223769, true }, + { 223777, true }, + { 223785, false }, + { 223797, true }, + { 223810, true }, + { 223825, true }, + { 223847, true }, + { 223861, true }, + { 223873, true }, + { 223891, true }, + { 223907, true }, + { 223916, false }, { 223933, true }, - { 223946, true }, - { 223956, true }, - { 223965, true }, - { 223979, true }, - { 223999, true }, - { 224014, true }, - { 224030, true }, - { 224040, true }, - { 224052, true }, - { 224072, true }, - { 224094, true }, - { 224107, true }, - { 224126, true }, - { 224140, true }, - { 224152, true }, - { 224176, true }, - { 224193, false }, - { 224207, true }, - { 224220, true }, - { 224233, true }, - { 224252, true }, - { 224274, true }, - { 224286, true }, - { 224301, true }, - { 224316, true }, - { 224337, true }, - { 224362, true }, - { 224387, true }, + { 223954, true }, + { 223975, true }, + { 223987, true }, + { 224003, true }, + { 224028, true }, + { 224054, true }, + { 224080, true }, + { 224091, true }, + { 224103, true }, + { 224116, true }, + { 224129, true }, + { 224139, true }, + { 224148, true }, + { 224162, true }, + { 224182, true }, + { 224197, true }, + { 224213, true }, + { 224223, true }, + { 224235, true }, + { 224255, true }, + { 224277, true }, + { 224290, true }, + { 224309, true }, + { 224323, true }, + { 224335, true }, + { 224359, true }, + { 224376, false }, + { 224390, true }, { 224403, true }, - { 224429, true }, - { 224442, true }, - { 224458, true }, - { 224471, true }, - { 224483, true }, - { 224501, true }, - { 224515, true }, - { 224534, true }, + { 224416, true }, + { 224435, true }, + { 224457, true }, + { 224469, true }, + { 224484, true }, + { 224499, true }, + { 224520, true }, { 224545, true }, - { 224557, true }, - { 224567, true }, - { 224576, true }, - { 224590, true }, - { 224607, true }, - { 224618, true }, - { 224629, true }, - { 224637, true }, - { 224649, true }, - { 224662, true }, - { 224676, true }, - { 224693, true }, - { 224704, false }, - { 224716, true }, - { 224735, true }, - { 224748, true }, + { 224570, true }, + { 224586, true }, + { 224612, true }, + { 224625, true }, + { 224641, true }, + { 224654, true }, + { 224666, true }, + { 224684, true }, + { 224698, true }, + { 224717, true }, + { 224728, true }, + { 224740, true }, + { 224750, true }, { 224759, true }, - { 224770, true }, - { 224781, true }, - { 224794, true }, - { 224805, true }, - { 224817, true }, - { 224827, true }, - { 224833, true }, - { 224843, true }, - { 224863, true }, - { 224873, true }, - { 224896, true }, - { 224908, true }, - { 224927, true }, - { 224935, true }, - { 224943, true }, - { 224957, true }, - { 224969, true }, - { 224984, false }, - { 224997, true }, + { 224773, true }, + { 224790, true }, + { 224801, true }, + { 224812, true }, + { 224820, true }, + { 224832, true }, + { 224845, true }, + { 224859, true }, + { 224876, true }, + { 224887, false }, + { 224899, true }, + { 224918, true }, + { 224931, true }, + { 224942, true }, + { 224953, true }, + { 224964, true }, + { 224977, true }, + { 224988, true }, + { 225000, true }, { 225010, true }, - { 225021, true }, - { 225032, true }, - { 225048, true }, - { 225062, true }, - { 225072, true }, - { 225086, true }, - { 225093, true }, - { 225106, true }, - { 225123, true }, - { 225133, true }, - { 225141, true }, - { 225156, true }, - { 225168, true }, - { 225184, true }, - { 225199, true }, - { 225209, true }, - { 225234, true }, - { 225242, true }, - { 225254, false }, - { 225265, false }, - { 225283, false }, - { 225296, true }, - { 225311, true }, - { 225325, true }, + { 225016, true }, + { 225026, true }, + { 225046, true }, + { 225056, true }, + { 225079, true }, + { 225091, true }, + { 225110, true }, + { 225118, true }, + { 225126, true }, + { 225140, true }, + { 225152, true }, + { 225167, false }, + { 225180, true }, + { 225193, true }, + { 225204, true }, + { 225215, true }, + { 225231, true }, + { 225245, true }, + { 225255, true }, + { 225269, true }, + { 225276, true }, + { 225289, true }, + { 225306, true }, + { 225316, true }, + { 225324, true }, { 225339, true }, - { 225356, true }, - { 225373, true }, - { 225388, true }, - { 225406, true }, - { 225424, true }, - { 225442, true }, - { 225456, true }, - { 225470, true }, - { 225484, true }, - { 225498, true }, - { 225512, false }, - { 225530, false }, - { 225553, false }, - { 225574, false }, - { 225593, true }, - { 225609, false }, - { 225625, false }, - { 225641, true }, - { 225663, true }, - { 225676, false }, - { 225693, false }, - { 225710, true }, - { 225727, false }, - { 225744, false }, - { 225758, false }, - { 225777, false }, - { 225788, false }, - { 225800, false }, - { 225812, false }, - { 225831, true }, - { 225849, false }, - { 225863, true }, - { 225879, false }, - { 225896, false }, - { 225913, false }, - { 225928, false }, - { 225944, true }, - { 225965, false }, - { 225984, false }, - { 226002, false }, - { 226022, true }, - { 226038, false }, - { 226053, true }, - { 226068, false }, - { 226092, true }, - { 226099, true }, - { 226118, false }, - { 226136, false }, - { 226151, true }, - { 226171, true }, - { 226192, false }, - { 226216, false }, - { 226235, false }, + { 225351, true }, + { 225367, true }, + { 225382, true }, + { 225392, true }, + { 225417, true }, + { 225425, true }, + { 225437, false }, + { 225448, false }, + { 225466, false }, + { 225479, true }, + { 225494, true }, + { 225508, true }, + { 225522, true }, + { 225539, true }, + { 225556, true }, + { 225571, true }, + { 225589, true }, + { 225607, true }, + { 225625, true }, + { 225639, true }, + { 225653, true }, + { 225667, true }, + { 225681, true }, + { 225695, false }, + { 225713, false }, + { 225736, false }, + { 225757, false }, + { 225776, true }, + { 225792, false }, + { 225808, false }, + { 225824, true }, + { 225846, true }, + { 225859, false }, + { 225876, false }, + { 225893, true }, + { 225910, false }, + { 225927, false }, + { 225941, false }, + { 225960, false }, + { 225971, false }, + { 225983, false }, + { 225995, false }, + { 226014, true }, + { 226032, false }, + { 226046, true }, + { 226062, false }, + { 226079, false }, + { 226096, false }, + { 226111, false }, + { 226127, true }, + { 226148, false }, + { 226167, false }, + { 226185, false }, + { 226205, true }, + { 226221, false }, + { 226236, true }, { 226251, false }, - { 226266, false }, - { 226279, true }, - { 226295, false }, - { 226310, false }, - { 226324, false }, - { 226342, true }, - { 226353, true }, - { 226364, true }, - { 226372, true }, - { 226380, true }, - { 226395, true }, - { 226405, true }, - { 226418, true }, - { 226435, true }, - { 226451, true }, - { 226459, true }, - { 226470, true }, - { 226480, true }, - { 226490, true }, - { 226506, true }, - { 226511, true }, - { 226516, true }, - { 226526, true }, - { 226534, true }, - { 226543, true }, - { 226551, true }, - { 226571, true }, + { 226275, true }, + { 226282, true }, + { 226301, false }, + { 226319, false }, + { 226334, true }, + { 226354, true }, + { 226375, false }, + { 226399, false }, + { 226418, false }, + { 226434, false }, + { 226449, false }, + { 226462, true }, + { 226478, false }, + { 226493, false }, + { 226507, false }, + { 226525, true }, + { 226536, true }, + { 226547, true }, + { 226555, true }, + { 226563, true }, { 226578, true }, - { 226597, true }, - { 226604, true }, - { 226611, true }, + { 226588, true }, + { 226601, true }, { 226618, true }, - { 226627, true }, - { 226648, true }, - { 226668, true }, - { 226692, true }, - { 226699, true }, - { 226709, true }, - { 226722, true }, - { 226739, true }, - { 226759, true }, - { 226765, true }, - { 226772, true }, - { 226784, true }, - { 226797, true }, - { 226812, false }, - { 226823, true }, - { 226834, true }, - { 226842, false }, - { 226861, true }, + { 226634, true }, + { 226642, true }, + { 226653, true }, + { 226663, true }, + { 226679, true }, + { 226684, true }, + { 226689, true }, + { 226697, true }, + { 226706, true }, + { 226714, true }, + { 226734, true }, + { 226741, true }, + { 226760, true }, + { 226767, true }, + { 226774, true }, + { 226781, true }, + { 226790, true }, + { 226811, true }, + { 226831, true }, + { 226855, true }, + { 226862, true }, { 226872, true }, - { 226883, true }, - { 226890, true }, - { 226901, true }, - { 226913, true }, - { 226932, true }, - { 226948, true }, + { 226885, true }, + { 226902, true }, + { 226922, true }, + { 226928, true }, + { 226935, true }, + { 226947, true }, { 226960, true }, - { 226971, true }, - { 226984, true }, - { 227000, true }, - { 227014, true }, - { 227029, true }, - { 227044, true }, - { 227054, true }, + { 226975, false }, + { 226986, true }, + { 226997, true }, + { 227005, false }, + { 227024, true }, + { 227035, true }, + { 227046, true }, + { 227053, true }, { 227064, true }, - { 227075, false }, - { 227085, true }, + { 227076, true }, { 227095, true }, - { 227106, true }, - { 227114, true }, - { 227122, true }, - { 227132, true }, - { 227141, false }, - { 227155, true }, - { 227165, true }, - { 227176, true }, - { 227184, true }, - { 227196, true }, + { 227111, true }, + { 227123, true }, + { 227134, true }, + { 227147, true }, + { 227163, true }, + { 227177, true }, + { 227192, true }, { 227207, true }, - { 227218, true }, - { 227230, true }, - { 227240, true }, + { 227217, true }, + { 227227, true }, + { 227238, false }, { 227248, true }, - { 227255, true }, - { 227262, true }, + { 227258, true }, { 227269, true }, - { 227287, true }, - { 227313, true }, + { 227277, true }, + { 227285, true }, + { 227295, true }, + { 227304, false }, + { 227318, true }, + { 227328, true }, { 227339, true }, - { 227350, true }, - { 227366, true }, - { 227378, true }, - { 227397, true }, - { 227421, true }, - { 227447, true }, - { 227470, true }, - { 227489, true }, - { 227514, true }, - { 227539, true }, - { 227579, true }, - { 227609, true }, - { 227620, true }, - { 227639, true }, - { 227650, false }, - { 227671, true }, - { 227689, true }, - { 227707, true }, - { 227725, true }, - { 227762, true }, - { 227785, true }, - { 227813, true }, - { 227828, true }, - { 227855, true }, - { 227869, true }, - { 227891, true }, - { 227916, true }, - { 227958, true }, - { 227977, true }, - { 228000, true }, - { 228016, true }, - { 228050, true }, - { 228074, true }, - { 228081, false }, - { 228088, true }, - { 228094, true }, - { 228105, true }, - { 228115, true }, - { 228125, true }, - { 228132, true }, - { 228139, true }, - { 228152, true }, - { 228159, true }, - { 228174, true }, - { 228188, true }, - { 228197, true }, - { 228211, true }, - { 228221, true }, - { 228231, true }, - { 228244, true }, + { 227347, true }, + { 227359, true }, + { 227370, true }, + { 227381, true }, + { 227393, true }, + { 227403, true }, + { 227411, true }, + { 227418, true }, + { 227425, true }, + { 227432, true }, + { 227450, true }, + { 227476, true }, + { 227502, true }, + { 227513, true }, + { 227529, true }, + { 227541, true }, + { 227560, true }, + { 227584, true }, + { 227610, true }, + { 227633, true }, + { 227652, true }, + { 227677, true }, + { 227702, true }, + { 227742, true }, + { 227772, true }, + { 227783, true }, + { 227802, true }, + { 227813, false }, + { 227834, true }, + { 227852, true }, + { 227870, true }, + { 227888, true }, + { 227925, true }, + { 227948, true }, + { 227976, true }, + { 227991, true }, + { 228018, true }, + { 228032, true }, + { 228054, true }, + { 228079, true }, + { 228121, true }, + { 228140, true }, + { 228163, true }, + { 228179, true }, + { 228213, true }, + { 228237, true }, + { 228244, false }, + { 228251, true }, { 228257, true }, - { 228264, true }, - { 228271, true }, - { 228280, true }, - { 228287, true }, - { 228298, true }, - { 228307, true }, - { 228318, true }, - { 228334, true }, - { 228343, true }, - { 228356, true }, - { 228363, true }, - { 228373, true }, - { 228381, true }, - { 228392, true }, - { 228402, true }, - { 228417, true }, + { 228268, true }, + { 228278, true }, + { 228288, true }, + { 228295, true }, + { 228302, true }, + { 228315, true }, + { 228322, true }, + { 228337, true }, + { 228351, true }, + { 228360, true }, + { 228374, true }, + { 228384, true }, + { 228394, true }, + { 228407, true }, + { 228420, true }, { 228427, true }, - { 228436, true }, - { 228456, true }, - { 228467, true }, - { 228478, true }, - { 228492, true }, - { 228501, true }, - { 228517, true }, - { 228524, true }, + { 228434, true }, + { 228443, true }, + { 228450, true }, + { 228461, true }, + { 228470, true }, + { 228481, true }, + { 228497, true }, + { 228506, true }, + { 228519, true }, + { 228526, true }, { 228536, true }, - { 228546, true }, - { 228553, true }, - { 228565, false }, - { 228576, true }, - { 228586, false }, - { 228598, true }, - { 228612, true }, - { 228625, true }, + { 228544, true }, + { 228555, true }, + { 228565, true }, + { 228580, true }, + { 228590, true }, + { 228599, true }, + { 228619, true }, + { 228630, true }, { 228641, true }, - { 228656, true }, - { 228668, true }, - { 228681, false }, - { 228691, true }, - { 228704, true }, - { 228726, true }, - { 228738, true }, - { 228750, true }, - { 228758, true }, - { 228767, true }, - { 228779, true }, - { 228789, false }, - { 228797, true }, - { 228807, true }, - { 228816, true }, - { 228836, true }, - { 228851, true }, - { 228867, false }, - { 228882, false }, - { 228895, true }, - { 228909, true }, - { 228919, false }, - { 228928, true }, - { 228935, true }, + { 228655, true }, + { 228664, true }, + { 228680, true }, + { 228687, true }, + { 228699, true }, + { 228709, true }, + { 228716, true }, + { 228728, false }, + { 228739, true }, + { 228749, false }, + { 228761, true }, + { 228775, true }, + { 228788, true }, + { 228804, true }, + { 228819, true }, + { 228831, true }, + { 228844, false }, + { 228854, true }, + { 228867, true }, + { 228889, true }, + { 228901, true }, + { 228913, true }, + { 228921, true }, + { 228930, true }, { 228942, true }, - { 228952, true }, - { 228961, true }, - { 228969, true }, - { 228978, true }, - { 228989, true }, - { 229003, true }, + { 228952, false }, + { 228960, true }, + { 228970, true }, + { 228979, true }, + { 228999, true }, { 229014, true }, - { 229024, true }, - { 229046, true }, - { 229061, true }, - { 229068, true }, - { 229079, true }, - { 229087, true }, - { 229097, true }, - { 229110, true }, - { 229128, true }, - { 229140, false }, - { 229149, true }, - { 229163, true }, - { 229179, true }, - { 229197, true }, - { 229208, true }, - { 229220, false }, - { 229235, true }, - { 229245, true }, - { 229257, true }, - { 229277, false }, - { 229287, true }, - { 229311, true }, - { 229322, true }, - { 229332, true }, - { 229344, true }, - { 229357, true }, - { 229374, true }, - { 229389, true }, - { 229402, true }, - { 229416, true }, - { 229431, true }, - { 229446, true }, - { 229458, true }, - { 229470, true }, - { 229484, true }, - { 229496, true }, + { 229030, false }, + { 229045, false }, + { 229058, true }, + { 229072, true }, + { 229082, false }, + { 229091, true }, + { 229098, true }, + { 229105, true }, + { 229115, true }, + { 229124, true }, + { 229132, true }, + { 229141, true }, + { 229152, true }, + { 229166, true }, + { 229177, true }, + { 229187, true }, + { 229209, true }, + { 229224, true }, + { 229231, true }, + { 229242, true }, + { 229250, true }, + { 229260, true }, + { 229273, true }, + { 229291, true }, + { 229303, false }, + { 229312, true }, + { 229326, true }, + { 229342, true }, + { 229360, true }, + { 229371, true }, + { 229383, false }, + { 229398, true }, + { 229408, true }, + { 229420, true }, + { 229440, false }, + { 229450, true }, + { 229474, true }, + { 229485, true }, + { 229495, true }, { 229507, true }, - { 229517, true }, - { 229530, true }, - { 229548, true }, - { 229561, true }, - { 229576, true }, - { 229591, true }, - { 229603, true }, - { 229612, true }, - { 229623, true }, - { 229645, true }, - { 229661, true }, - { 229681, false }, - { 229690, true }, - { 229698, true }, - { 229706, true }, - { 229719, true }, - { 229731, true }, + { 229520, true }, + { 229537, true }, + { 229552, true }, + { 229565, true }, + { 229579, true }, + { 229594, true }, + { 229609, true }, + { 229621, true }, + { 229633, true }, + { 229647, true }, + { 229659, true }, + { 229670, true }, + { 229680, true }, + { 229693, true }, + { 229711, true }, + { 229724, true }, { 229739, true }, { 229754, true }, - { 229764, true }, + { 229766, true }, { 229775, true }, - { 229791, true }, - { 229800, true }, - { 229809, true }, - { 229818, true }, - { 229833, true }, - { 229852, true }, - { 229865, true }, - { 229878, true }, - { 229887, true }, - { 229898, true }, - { 229912, true }, - { 229924, true }, - { 229942, true }, - { 229955, true }, + { 229786, true }, + { 229808, true }, + { 229824, true }, + { 229844, false }, + { 229853, true }, + { 229861, true }, + { 229869, true }, + { 229882, true }, + { 229894, true }, + { 229902, true }, + { 229917, true }, + { 229927, true }, + { 229938, true }, + { 229954, true }, { 229963, true }, - { 229977, true }, - { 229989, true }, - { 229999, true }, - { 230006, true }, - { 230014, true }, - { 230022, true }, - { 230032, true }, + { 229972, true }, + { 229981, true }, + { 229996, true }, + { 230015, true }, + { 230028, true }, { 230041, true }, - { 230064, true }, - { 230077, true }, - { 230082, true }, - { 230092, true }, - { 230099, true }, - { 230106, true }, - { 230118, false }, - { 230137, true }, - { 230148, true }, - { 230164, true }, - { 230179, true }, - { 230194, true }, - { 230207, true }, - { 230220, true }, - { 230228, true }, - { 230238, true }, - { 230248, true }, - { 230263, true }, - { 230277, true }, - { 230305, true }, - { 230318, true }, - { 230331, true }, - { 230348, true }, - { 230356, true }, - { 230365, true }, - { 230378, true }, - { 230390, true }, - { 230397, true }, - { 230427, true }, - { 230438, true }, - { 230456, true }, - { 230464, true }, - { 230488, true }, - { 230498, true }, - { 230510, true }, - { 230521, true }, - { 230533, true }, - { 230551, true }, + { 230050, true }, + { 230061, true }, + { 230075, true }, + { 230087, true }, + { 230105, true }, + { 230118, true }, + { 230126, true }, + { 230140, true }, + { 230152, true }, + { 230162, true }, + { 230169, true }, + { 230177, true }, + { 230185, true }, + { 230195, true }, + { 230204, true }, + { 230227, true }, + { 230240, true }, + { 230245, true }, + { 230255, true }, + { 230262, true }, + { 230269, true }, + { 230281, false }, + { 230300, true }, + { 230311, true }, + { 230327, true }, + { 230342, true }, + { 230357, true }, + { 230370, true }, + { 230383, true }, + { 230391, true }, + { 230401, true }, + { 230411, true }, + { 230426, true }, + { 230440, true }, + { 230468, true }, + { 230481, true }, + { 230494, true }, + { 230511, true }, + { 230519, true }, + { 230528, true }, + { 230541, true }, + { 230553, true }, { 230560, true }, - { 230571, true }, - { 230583, true }, - { 230591, true }, - { 230598, true }, - { 230606, true }, - { 230617, true }, + { 230590, true }, + { 230601, true }, + { 230619, true }, { 230627, true }, - { 230636, true }, - { 230662, true }, - { 230674, true }, - { 230683, true }, - { 230708, true }, - { 230728, true }, - { 230750, true }, + { 230651, true }, + { 230661, true }, + { 230673, true }, + { 230684, true }, + { 230696, true }, + { 230714, true }, + { 230723, true }, + { 230734, true }, + { 230746, true }, + { 230754, true }, { 230761, true }, - { 230772, true }, - { 230784, true }, - { 230797, true }, - { 230812, true }, - { 230830, true }, - { 230843, true }, - { 230858, true }, - { 230874, true }, - { 230892, true }, - { 230906, true }, - { 230916, true }, - { 230928, true }, - { 230936, true }, - { 230948, true }, + { 230769, true }, + { 230780, true }, + { 230790, true }, + { 230799, true }, + { 230825, true }, + { 230837, true }, + { 230846, true }, + { 230871, true }, + { 230891, true }, + { 230913, true }, + { 230924, true }, + { 230935, true }, + { 230947, true }, { 230960, true }, - { 230971, true }, - { 230984, true }, - { 230995, true }, - { 231008, true }, - { 231020, true }, - { 231032, false }, - { 231042, true }, - { 231053, true }, - { 231068, true }, - { 231081, true }, - { 231092, true }, - { 231102, true }, - { 231109, true }, + { 230975, true }, + { 230993, true }, + { 231006, true }, + { 231021, true }, + { 231037, true }, + { 231055, true }, + { 231069, true }, + { 231079, true }, + { 231091, true }, + { 231099, true }, + { 231111, true }, { 231123, true }, - { 231135, true }, + { 231134, true }, { 231147, true }, - { 231163, true }, - { 231178, true }, - { 231191, true }, - { 231203, true }, - { 231216, true }, - { 231231, true }, - { 231238, true }, - { 231253, false }, - { 231266, true }, - { 231278, true }, - { 231287, true }, - { 231299, true }, - { 231307, true }, - { 231322, true }, - { 231337, true }, - { 231346, false }, + { 231158, true }, + { 231171, true }, + { 231183, false }, + { 231193, true }, + { 231204, true }, + { 231219, true }, + { 231232, true }, + { 231243, true }, + { 231253, true }, + { 231260, true }, + { 231274, true }, + { 231286, true }, + { 231298, true }, + { 231314, true }, + { 231329, true }, + { 231342, true }, { 231354, true }, - { 231365, true }, - { 231373, true }, - { 231384, true }, - { 231395, true }, - { 231412, true }, - { 231426, false }, + { 231367, true }, + { 231382, true }, + { 231389, true }, + { 231404, false }, + { 231417, true }, + { 231429, true }, { 231438, true }, - { 231457, true }, - { 231475, true }, - { 231486, true }, - { 231506, true }, - { 231522, true }, - { 231537, true }, - { 231549, true }, - { 231559, true }, - { 231566, true }, - { 231577, true }, - { 231587, true }, - { 231593, true }, - { 231603, true }, - { 231618, true }, - { 231630, true }, - { 231642, true }, + { 231450, true }, + { 231458, true }, + { 231473, true }, + { 231488, true }, + { 231497, false }, + { 231505, true }, + { 231516, true }, + { 231524, true }, + { 231535, true }, + { 231546, true }, + { 231563, true }, + { 231577, false }, + { 231589, true }, + { 231608, true }, + { 231626, true }, + { 231637, true }, { 231657, true }, - { 231668, true }, - { 231681, true }, - { 231705, true }, - { 231712, true }, - { 231723, true }, - { 231734, true }, - { 231745, true }, - { 231756, true }, - { 231771, true }, - { 231795, true }, - { 231813, true }, - { 231826, true }, - { 231837, true }, - { 231852, true }, - { 231868, true }, - { 231877, true }, - { 231888, true }, - { 231912, true }, - { 231927, true }, - { 231938, true }, - { 231948, true }, - { 231956, true }, - { 231973, true }, - { 231992, true }, + { 231673, true }, + { 231688, true }, + { 231700, true }, + { 231710, true }, + { 231717, true }, + { 231728, true }, + { 231738, true }, + { 231744, true }, + { 231754, true }, + { 231769, true }, + { 231781, true }, + { 231793, true }, + { 231808, true }, + { 231819, true }, + { 231832, true }, + { 231856, true }, + { 231863, true }, + { 231874, true }, + { 231885, true }, + { 231896, true }, + { 231907, true }, + { 231922, true }, + { 231946, true }, + { 231964, true }, + { 231977, true }, + { 231988, true }, { 232003, true }, - { 232013, true }, - { 232023, true }, - { 232034, true }, - { 232042, true }, - { 232056, false }, + { 232019, true }, + { 232028, true }, + { 232039, true }, { 232063, true }, - { 232075, true }, - { 232084, true }, - { 232098, true }, - { 232106, true }, - { 232116, true }, - { 232129, true }, + { 232078, true }, + { 232089, true }, + { 232099, true }, + { 232107, true }, + { 232124, true }, { 232143, true }, + { 232154, true }, { 232164, true }, - { 232178, true }, - { 232188, true }, - { 232195, true }, - { 232206, true }, - { 232216, true }, + { 232174, true }, + { 232185, true }, + { 232193, true }, + { 232207, false }, + { 232214, true }, { 232226, true }, - { 232239, true }, - { 232247, true }, - { 232256, true }, - { 232269, true }, - { 232282, true }, - { 232295, true }, - { 232305, true }, - { 232316, true }, - { 232326, true }, - { 232335, true }, - { 232345, true }, + { 232235, true }, + { 232249, true }, + { 232257, true }, + { 232267, true }, + { 232280, true }, + { 232294, true }, + { 232315, true }, + { 232329, true }, + { 232339, true }, + { 232346, true }, + { 232357, true }, + { 232367, true }, + { 232377, true }, + { 232390, true }, + { 232398, true }, + { 232407, true }, + { 232420, true }, + { 232433, true }, + { 232446, true }, + { 232456, true }, + { 232467, true }, + { 232477, true }, + { 232486, true }, + { 232496, true }, }; From 60ae6514e4c559c0c234f0e7aefccb101b8beb2e Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 23 Feb 2017 07:36:26 -0800 Subject: [PATCH 8/9] No bug, Automated HPKP preload list update from host bld-linux64-spot-036 - a=hpkp-update --- security/manager/ssl/StaticHPKPins.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index cace86e38852..f65ca6726993 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1157,4 +1157,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = { static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1496246555187000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1496331215141000); From 47dc9207cdd1792758d86077d17ad44cf8112cf9 Mon Sep 17 00:00:00 2001 From: Wes Kocher Date: Thu, 23 Feb 2017 16:25:18 -0800 Subject: [PATCH 9/9] Backed out changeset 20a81b2adf80 (bug 1330240) under suspicion of turning android mda1 nearly permafail a=backout MozReview-Commit-ID: LUKhxorIzwU --- build/moz.configure/warnings.configure | 3 +++ media/webrtc/trunk/webrtc/build/common.gypi | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/moz.configure/warnings.configure b/build/moz.configure/warnings.configure index 2f1b255ddc8b..219ca0036651 100644 --- a/build/moz.configure/warnings.configure +++ b/build/moz.configure/warnings.configure @@ -78,6 +78,9 @@ check_and_add_gcc_warning('-Werror=non-literal-null-conversion', # catches string literals used in boolean expressions check_and_add_gcc_warning('-Wstring-conversion') +# catches inconsistent use of mutexes +check_and_add_gcc_warning('-Wthread-safety') + # we inline 'new' and 'delete' in mozalloc check_and_add_gcc_warning('-Wno-inline-new-delete', cxx_compiler) diff --git a/media/webrtc/trunk/webrtc/build/common.gypi b/media/webrtc/trunk/webrtc/build/common.gypi index 2b01f38788c7..970269b73afa 100644 --- a/media/webrtc/trunk/webrtc/build/common.gypi +++ b/media/webrtc/trunk/webrtc/build/common.gypi @@ -326,9 +326,6 @@ '-Wimplicit-fallthrough', '-Wthread-safety', ], - 'cflags_mozilla': [ - '-Wthread-safety', - ], }], ], }],