From 88b8e1cde8e8f38a1205422dffedde0c7544c184 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Mon, 3 Aug 2026 20:56:46 +0100 Subject: [PATCH 01/38] Global sub-pixel image buffer first pass --- src/dev_support/psfsuite.zig | 36 ++ src/riley/zig/rasterconfig.zig | 13 + src/riley/zig/rasterengine_common.zig | 169 +++++++++- src/riley/zig/rasterengine_scalar.zig | 81 ++++- src/riley/zig/rasterengine_simd.zig | 60 +++- src/riley/zig/rasterengineglobal.zig | 15 + src/riley/zig/rasterengineglobal_common.zig | 51 +++ src/riley/zig/rasterengineglobal_scalar.zig | 139 ++++++++ src/riley/zig/rasterengineglobal_simd.zig | 146 ++++++++ src/riley/zig/report.zig | 22 +- src/riley/zig/riley.zig | 313 ++++++++++++++++-- src/riley/zig/scratchresolveglobal.zig | 45 +++ src/riley/zig/scratchresolveglobal_common.zig | 214 ++++++++++++ src/riley/zig/scratchresolveglobal_scalar.zig | 41 +++ src/riley/zig/scratchresolveglobal_simd.zig | 41 +++ src/riley/zig/subpxframe.zig | 278 ++++++++++++++++ src/riley/zig/subpxtileops.zig | 233 +++++++++++++ src/riley/zig/validateinput.zig | 79 +++++ src/tests/test_gold_psf.zig | 163 ++++++--- 19 files changed, 2021 insertions(+), 118 deletions(-) create mode 100644 src/riley/zig/rasterengineglobal.zig create mode 100644 src/riley/zig/rasterengineglobal_common.zig create mode 100644 src/riley/zig/rasterengineglobal_scalar.zig create mode 100644 src/riley/zig/rasterengineglobal_simd.zig create mode 100644 src/riley/zig/scratchresolveglobal.zig create mode 100644 src/riley/zig/scratchresolveglobal_common.zig create mode 100644 src/riley/zig/scratchresolveglobal_scalar.zig create mode 100644 src/riley/zig/scratchresolveglobal_simd.zig create mode 100644 src/riley/zig/subpxframe.zig create mode 100644 src/riley/zig/subpxtileops.zig diff --git a/src/dev_support/psfsuite.zig b/src/dev_support/psfsuite.zig index 923636b4..d2afcc0c 100644 --- a/src/dev_support/psfsuite.zig +++ b/src/dev_support/psfsuite.zig @@ -220,6 +220,41 @@ pub fn renderCaseWithRasterHalo( render_case: RenderCase, tile_size_override: ?u16, raster_halo_px_override: ?u16, +) !NDArray(F) { + return renderCaseWithOptions( + outer_alloc, + io, + render_case, + tile_size_override, + raster_halo_px_override, + .tile_local, + ); +} + +pub fn renderCaseWithBufferMode( + outer_alloc: std.mem.Allocator, + io: std.Io, + render_case: RenderCase, + tile_size_override: ?u16, + buffer_mode: rastcfg.BufferMode, +) !NDArray(F) { + return renderCaseWithOptions( + outer_alloc, + io, + render_case, + tile_size_override, + null, + buffer_mode, + ); +} + +fn renderCaseWithOptions( + outer_alloc: std.mem.Allocator, + io: std.Io, + render_case: RenderCase, + tile_size_override: ?u16, + raster_halo_px_override: ?u16, + buffer_mode: rastcfg.BufferMode, ) !NDArray(F) { var arena = std.heap.ArenaAllocator.init(outer_alloc); defer arena.deinit(); @@ -246,6 +281,7 @@ pub fn renderCaseWithRasterHalo( render_case.shader_case.background_value, ); config.raster_halo_px_override = raster_halo_px_override; + config.buffer_mode = buffer_mode; const render_groups = [_]riley.RenderGroupSpec{ .{ .io = io, .workers = @max(@as(u16, 1), config.total_threads) }, }; diff --git a/src/riley/zig/rasterconfig.zig b/src/riley/zig/rasterconfig.zig index 33c609dc..b9a62694 100644 --- a/src/riley/zig/rasterconfig.zig +++ b/src/riley/zig/rasterconfig.zig @@ -59,6 +59,13 @@ pub const RasterConfig = struct { tile_size_override: ?u16 = null, tile_size_min: u16 = 1, tile_size_max: u16 = 256, + buffer_mode: BufferMode = .tile_local, + global_subpx_tile_size_override: ?u16 = null, + global_subpx_tile_size_min: u16 = 64, + global_subpx_tile_size_max: u16 = 1024, + global_subpx_stripe_size_override: ?u16 = null, + global_subpx_stripe_size_min: u16 = 256, + global_subpx_stripe_size_max: u16 = 4096, // Test/development override for exercising the extended raster domain // without changing the camera PSF or resolve operation. raster_halo_px_override: ?u16 = null, @@ -71,6 +78,12 @@ pub const RasterConfig = struct { save_frame_buff_count: usize = buildconfig.SaveFrameBuffCount, }; +pub const BufferMode = enum { + tile_local, + global_subpx_full, + global_subpx_stripe, +}; + pub const RenderMode = enum { // Preserve timestep order. Geometry/raster work may run in parallel across // cameras, but later timesteps do not advance until the current timestep diff --git a/src/riley/zig/rasterengine_common.zig b/src/riley/zig/rasterengine_common.zig index e1035867..c9b5ab7e 100644 --- a/src/riley/zig/rasterengine_common.zig +++ b/src/riley/zig/rasterengine_common.zig @@ -24,6 +24,7 @@ const rops = @import("rasterops.zig"); const newton = @import("newton.zig"); const pce = @import("parachunkexec.zig"); const scratchresolve = @import("scratchresolve.zig"); +const subpxframe = @import("subpxframe.zig"); const scalingpolicy = @import("scalingpolicy.zig"); const mo = @import("meshpipeline.zig"); const MeshPrepared = mo.MeshPrepared; @@ -225,7 +226,7 @@ pub fn rasterDirectScalComm( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = global_subx, .global_suby = global_suby, }, @@ -295,6 +296,7 @@ pub fn rasterSceneComm( &worker_state.subpx_scratch, tile_rng_ctx.fields_num, tile_rng_ctx.subpx_tile_size, + true, ); } } @@ -358,6 +360,133 @@ pub fn rasterSceneComm( } } +pub fn rasterSceneGlobalComm( + comptime RasterBackend: type, + comptime report_mode: ReportMode, + outer_alloc: std.mem.Allocator, + io: std.Io, + ctx_rast: rops.RasterContext, + ctx_report: report.ReportContext(report_mode), + requested_workers: u16, + tiling: rops.TilingOverlaps, + meshes: []const MeshPrepared, + raster_hulls: []const ?NDArray(F), + target: *subpxframe.SubpxTarget, + image_out_arr: *NDArray(F), +) !void { + if (tiling.active_tiles.len == 0) return; + + const WorkerState = comptime ThreadState(RasterBackend, report_mode); + const GlobalTileRangeCtx = struct { + io: std.Io, + ctx_rast: rops.RasterContext, + shared_log: *report.LogType(report_mode), + tiling: rops.TilingOverlaps, + meshes: []const MeshPrepared, + raster_hulls: []const ?NDArray(F), + target: *subpxframe.SubpxTarget, + image_out_arr: *NDArray(F), + worker_states: []WorkerState, + fields_num: u8, + subpx_tile_size: usize, + }; + const TileRangeWorkerAdapter = struct { + fn run( + ctx_ptr: *anyopaque, + worker_idx: usize, + range_start: usize, + range_end: usize, + ) anyerror!void { + const tile_rng_ctx: *GlobalTileRangeCtx = @ptrCast(@alignCast(ctx_ptr)); + const worker_state = &tile_rng_ctx.worker_states[worker_idx]; + const ctx_report_task = report.ReportContext(report_mode){ + .log = if (comptime report_mode == .full_stats) + tile_rng_ctx.shared_log + else + &worker_state.log, + }; + + for (range_start..range_end) |tile_idx| { + const tile = tile_rng_ctx.tiling.active_tiles[tile_idx]; + RasterBackend.configureTarget( + &worker_state.subpx_scratch, + tile_rng_ctx.target, + tile, + tile_rng_ctx.ctx_rast.camera.sub_sample, + ); + try rasterTileRaw( + RasterBackend, + report_mode, + tile_rng_ctx.io, + tile_rng_ctx.ctx_rast, + ctx_report_task, + tile, + tile_rng_ctx.tiling.overlaps, + tile_rng_ctx.meshes, + tile_rng_ctx.raster_hulls, + tile_rng_ctx.image_out_arr, + &worker_state.subpx_scratch, + tile_rng_ctx.fields_num, + tile_rng_ctx.subpx_tile_size, + ); + } + } + }; + + const workers_num = scalingpolicy.rasterWorkers( + requested_workers, + tiling.active_tiles.len, + ); + var chunk_exec = pce.ParaChunkExecutor.init(io, @intCast(workers_num)); + var arena = std.heap.ArenaAllocator.init(outer_alloc); + defer arena.deinit(); + const arena_alloc = arena.allocator(); + + const worker_states = try arena_alloc.alloc(WorkerState, workers_num); + var initialized_num: usize = 0; + errdefer for (worker_states[0..initialized_num]) |*worker_state| { + worker_state.deinit(); + }; + for (worker_states) |*worker_state| { + worker_state.* = try WorkerState.init( + arena_alloc, + ctx_rast, + image_out_arr.dims[0], + tileScratchSubpxSize(ctx_rast), + ); + initialized_num += 1; + } + defer for (worker_states) |*worker_state| worker_state.deinit(); + + var tile_range_ctx = GlobalTileRangeCtx{ + .io = io, + .ctx_rast = ctx_rast, + .shared_log = ctx_report.log, + .tiling = tiling, + .meshes = meshes, + .raster_hulls = raster_hulls, + .target = target, + .image_out_arr = image_out_arr, + .worker_states = worker_states, + .fields_num = @intCast(image_out_arr.dims[0]), + .subpx_tile_size = tileScratchSubpxSize(ctx_rast), + }; + try chunk_exec.runDynRangeWithWorkerErr( + &tile_range_ctx, + TileRangeWorkerAdapter.run, + tiling.active_tiles.len, + scalingpolicy.rasterGrainSize(tiling.active_tiles.len, workers_num), + ); + + if (comptime report_mode == .bench) { + if (report.getBenchLog(report_mode, ctx_report.log)) |bench_log| { + for (worker_states) |*worker_state| { + report.reduceBenchLog(bench_log, &worker_state.log); + } + } + } +} + //------------------------------------------------------------------------------------------ // Direct Stepped Tri3 Fixed-Point Helpers //------------------------------------------------------------------------------------------ @@ -612,6 +741,7 @@ fn rasterTileComm( subpx_scratch: *RasterBackend.SubpxScratchBuffs, fields_num: u8, subpx_tile_size: usize, + resolve_tile: bool, ) !void { const tile_scope: ?rasterreport.TileScope = if (comptime report_mode == .full_stats) @@ -1031,7 +1161,9 @@ fn rasterTileComm( else null; - if (ctx_rast.camera.prep_psf.hasFilter()) { + if (!resolve_tile) { + // Global paths resolve frame or stripe storage after all raster tiles complete. + } else if (ctx_rast.camera.prep_psf.hasFilter()) { scratchresolve.resolveTileWithPSF( tile, sub_samp, @@ -1104,6 +1236,39 @@ fn rasterTileComm( ); } +pub fn rasterTileRaw( + comptime RasterBackend: type, + comptime report_mode: ReportMode, + io: std.Io, + ctx_rast: rops.RasterContext, + ctx_report: report.ReportContext(report_mode), + tile: rops.ActiveTile, + overlaps_all: []const rops.OverlapBBox, + meshes: []const MeshPrepared, + raster_hulls: []const ?NDArray(F), + image_out_arr: *NDArray(F), + subpx_scratch: *RasterBackend.SubpxScratchBuffs, + fields_num: u8, + subpx_tile_size: usize, +) !void { + try rasterTileComm( + RasterBackend, + report_mode, + io, + ctx_rast, + ctx_report, + tile, + overlaps_all, + meshes, + raster_hulls, + image_out_arr, + subpx_scratch, + fields_num, + subpx_tile_size, + false, + ); +} + //------------------------------------------------------------------------------------------ // Scene Raster Execution Helpers //------------------------------------------------------------------------------------------ diff --git a/src/riley/zig/rasterengine_scalar.zig b/src/riley/zig/rasterengine_scalar.zig index fddb38c1..ea19b430 100644 --- a/src/riley/zig/rasterengine_scalar.zig +++ b/src/riley/zig/rasterengine_scalar.zig @@ -49,6 +49,13 @@ pub const SubpxScratchBuffs = struct { touched_min_x: []usize, touched_max_x: []usize, ideal_pix_cent: []F, + + pub inline fn imageIndex( + _: *const SubpxScratchBuffs, + local_idx: usize, + ) usize { + return local_idx; + } }; // -------------------------------------------------------------------------------------- @@ -143,6 +150,15 @@ pub fn RasterEngine( comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, +) type { + return RasterEngineFor(SubpxScratchBuffs, Geom, ShaderKern, ShaderData); +} + +pub fn RasterEngineFor( + comptime ScratchBuffs: type, + comptime Geom: type, + comptime ShaderKern: type, + comptime ShaderData: type, ) type { return struct { pub fn render( @@ -155,7 +171,7 @@ pub fn RasterEngine( raster_hull: ?*const NDArray(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const sub_samp_u: usize = @intCast(ctx_rast.camera.sub_sample); const sub_samp_f: F = @as(F, @floatFromInt(ctx_rast.camera.sub_sample)); @@ -223,10 +239,11 @@ pub fn RasterEngine( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { if (comptime Geom == geomkerns.Tri3OptKernel()) { return rasterSteppedScal( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -246,6 +263,7 @@ pub fn RasterEngine( } if (comptime Geom.solver_kind != .newton) { return rasterDirectImpl( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -265,6 +283,7 @@ pub fn RasterEngine( } return rasterNewtonImpl( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -295,9 +314,10 @@ pub fn RasterEngine( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { return rasterNewtonImpl( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -319,6 +339,7 @@ pub fn RasterEngine( } fn rasterDirectImpl( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, @@ -333,7 +354,7 @@ fn rasterDirectImpl( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { std.debug.assert(subpx_scratch.image.rows_num <= std.math.maxInt(u8)); const fields_num: u8 = @intCast(subpx_scratch.image.rows_num); @@ -343,7 +364,7 @@ fn rasterDirectImpl( ShaderKern, ShaderData, report_mode, - SubpxScratchBuffs, + ScratchBuffs, ctx_rast, ctx_report, tile, @@ -359,6 +380,7 @@ fn rasterDirectImpl( } fn rasterNewtonImpl( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, @@ -373,7 +395,7 @@ fn rasterNewtonImpl( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { comptime { if (Geom.solver_kind != .newton) { @@ -620,8 +642,14 @@ fn rasterNewtonImpl( global_subx, global_suby, result.iters, - tile.scratch_x_px_min + scratch_x / sub_samp, - tile.scratch_y_px_min + scratch_y / sub_samp, + @intCast(@max(0, tile.scratch_x_px_min + @as( + i32, + @intCast(scratch_x / sub_samp), + ))), + @intCast(@max(0, tile.scratch_y_px_min + @as( + i32, + @intCast(scratch_y / sub_samp), + ))), ); } @@ -630,7 +658,7 @@ fn rasterNewtonImpl( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = global_subx, .global_suby = global_suby, }; @@ -657,6 +685,7 @@ fn rasterNewtonImpl( } fn rasterSteppedScal( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, @@ -671,7 +700,7 @@ fn rasterSteppedScal( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const sub_samp: usize = @intCast(ctx_rast.camera.sub_sample); const tile_subpx_x = @as(isize, tile.scratch_x_px_min) * @@ -694,6 +723,7 @@ fn rasterSteppedScal( max_y_steps, )) |fixed| { return rasterSteppedScalFixP( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -714,6 +744,7 @@ fn rasterSteppedScal( } return rasterSteppedScalFloat( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -733,6 +764,7 @@ fn rasterSteppedScal( } fn rasterSteppedScalFixP( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, @@ -747,7 +779,7 @@ fn rasterSteppedScalFixP( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, fixed: comm.Tri3FixedEdges, ) !u64 { const N = Geom.nodes_num; @@ -850,8 +882,14 @@ fn rasterSteppedScalFixP( global_subx, global_suby, 1, - tile.scratch_x_px_min + scratch_x_u / sub_samp, - tile.scratch_y_px_min + scratch_y_u / sub_samp, + @intCast(@max(0, tile.scratch_x_px_min + @as( + i32, + @intCast(scratch_x_u / sub_samp), + ))), + @intCast(@max(0, tile.scratch_y_px_min + @as( + i32, + @intCast(scratch_y_u / sub_samp), + ))), ); } @@ -882,7 +920,7 @@ fn rasterSteppedScalFixP( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = global_subx, .global_suby = global_suby, }; @@ -930,6 +968,7 @@ fn rasterSteppedScalFixP( } fn rasterSteppedScalFloat( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, @@ -944,7 +983,7 @@ fn rasterSteppedScalFloat( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const N = Geom.nodes_num; var shaded_px: u64 = 0; @@ -1089,8 +1128,14 @@ fn rasterSteppedScalFloat( global_subx, global_suby, 1, - tile.scratch_x_px_min + scratch_x_u / sub_samp, - tile.scratch_y_px_min + scratch_y_u / sub_samp, + @intCast(@max(0, tile.scratch_x_px_min + @as( + i32, + @intCast(scratch_x_u / sub_samp), + ))), + @intCast(@max(0, tile.scratch_y_px_min + @as( + i32, + @intCast(scratch_y_u / sub_samp), + ))), ); } @@ -1121,7 +1166,7 @@ fn rasterSteppedScalFloat( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = global_subx, .global_suby = global_suby, }; diff --git a/src/riley/zig/rasterengine_simd.zig b/src/riley/zig/rasterengine_simd.zig index a4e34e0a..de6afece 100644 --- a/src/riley/zig/rasterengine_simd.zig +++ b/src/riley/zig/rasterengine_simd.zig @@ -64,9 +64,16 @@ pub const SubpxScratchBuffs = struct { touched_min_x: []usize, touched_max_x: []usize, ideal_pix_cent: []align(64) F, + + pub inline fn imageIndex( + _: *const SubpxScratchBuffs, + local_idx: usize, + ) usize { + return local_idx; + } }; -const SubpxSimdChunk = struct { +pub const SubpxSimdChunk = struct { scratch_x_u: [S]usize, scratch_y_u: [S]usize, px_f: [S]F, @@ -211,6 +218,15 @@ pub fn RasterEngine( comptime Geom: type, // geometrykernels.zig comptime ShaderKern: type, // shaderkernels.zig comptime ShaderData: type, // shaderops_common.zig, ShaderPrepared +) type { + return RasterEngineFor(SubpxScratchBuffs, Geom, ShaderKern, ShaderData); +} + +pub fn RasterEngineFor( + comptime ScratchBuffs: type, + comptime Geom: type, + comptime ShaderKern: type, + comptime ShaderData: type, ) type { return struct { pub fn render( @@ -223,7 +239,7 @@ pub fn RasterEngine( raster_hull: ?*const NDArray(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const sub_samp_u: usize = @intCast(ctx_rast.camera.sub_sample); const sub_samp_f: F = @as(F, @floatFromInt(ctx_rast.camera.sub_sample)); @@ -263,6 +279,7 @@ pub fn RasterEngine( const shaded_px = if (comptime Geom == geomkerns.Tri3OptKernel()) try rasterSteppedSIMD( + ScratchBuffs, Geom, ShaderKern, report_mode, @@ -344,9 +361,10 @@ pub fn RasterEngine( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { return rasterDirectSIMDImpl( + ScratchBuffs, Geom, ShaderKern, report_mode, @@ -379,9 +397,10 @@ pub fn RasterEngine( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { return rasterNewtonSIMDImpl( + ScratchBuffs, Geom, ShaderKern, report_mode, @@ -414,9 +433,10 @@ pub fn RasterEngine( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { return rasterDirectImpl( + ScratchBuffs, Geom, ShaderKern, ShaderData, @@ -438,6 +458,7 @@ pub fn RasterEngine( } fn rasterDirectSIMDImpl( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime report_mode: ReportMode, @@ -451,7 +472,7 @@ fn rasterDirectSIMDImpl( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const N = Geom.nodes_num; var shaded_px: u64 = 0; @@ -569,7 +590,7 @@ fn rasterDirectSIMDImpl( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = comm.globalSubpxForReport( tile.scratch_x_px_min, sub_samp, @@ -603,6 +624,7 @@ fn rasterDirectSIMDImpl( } fn rasterNewtonSIMDImpl( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime report_mode: ReportMode, @@ -617,7 +639,7 @@ fn rasterNewtonSIMDImpl( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const N = Geom.nodes_num; var shaded_px: u64 = 0; @@ -966,7 +988,7 @@ fn rasterNewtonSIMDImpl( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = comm.globalSubpxForReport( tile.scratch_x_px_min, sub_samp, @@ -1001,6 +1023,7 @@ fn rasterNewtonSIMDImpl( } fn rasterDirectImpl( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime ShaderData: type, @@ -1015,7 +1038,7 @@ fn rasterDirectImpl( nodes_coords: Vec3Slices(F), shader: *const ShaderData, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { std.debug.assert(subpx_scratch.image.rows_num <= std.math.maxInt(u8)); const fields_num: u8 = @intCast(subpx_scratch.image.rows_num); @@ -1024,7 +1047,7 @@ fn rasterDirectImpl( ShaderKern, ShaderData, report_mode, - SubpxScratchBuffs, + ScratchBuffs, ctx_rast, ctx_report, tile, @@ -1040,6 +1063,7 @@ fn rasterDirectImpl( } fn rasterSteppedSIMD( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime report_mode: ReportMode, @@ -1053,7 +1077,7 @@ fn rasterSteppedSIMD( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { const sub_samp: usize = @intCast(ctx_rast.camera.sub_sample); const tile_subpx_x = @as(isize, tile.scratch_x_px_min) * @@ -1077,6 +1101,7 @@ fn rasterSteppedSIMD( max_y_steps, )) |fixed| { return rasterSteppedSIMDFixP( + ScratchBuffs, Geom, ShaderKern, report_mode, @@ -1096,6 +1121,7 @@ fn rasterSteppedSIMD( } return rasterSteppedSIMDFloat( + ScratchBuffs, Geom, ShaderKern, report_mode, @@ -1114,6 +1140,7 @@ fn rasterSteppedSIMD( } fn rasterSteppedSIMDFixP( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime report_mode: ReportMode, @@ -1127,7 +1154,7 @@ fn rasterSteppedSIMDFixP( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, fixed: comm.Tri3FixedEdges, ) !u64 { var shaded_px: u64 = 0; @@ -1331,7 +1358,7 @@ fn rasterSteppedSIMDFixP( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = comm.globalSubpxForReport( tile.scratch_x_px_min, sub_samp, @@ -1368,6 +1395,7 @@ fn rasterSteppedSIMDFixP( } fn rasterSteppedSIMDFloat( + comptime ScratchBuffs: type, comptime Geom: type, comptime ShaderKern: type, comptime report_mode: ReportMode, @@ -1381,7 +1409,7 @@ fn rasterSteppedSIMDFloat( nodes_coords: Vec3Slices(F), shader: anytype, shader_buf: *const shaderops.LocalShaderBuff(Geom.nodes_num), - subpx_scratch: *SubpxScratchBuffs, + subpx_scratch: *ScratchBuffs, ) !u64 { var shaded_px: u64 = 0; const sub_samp: usize = @intCast(ctx_rast.camera.sub_sample); @@ -1600,7 +1628,7 @@ fn rasterSteppedSIMDFloat( .elem_idx = overlap.elem_idx, .fields_num = fields_num, .actual_fields = fields_num, - .scratch_idx = scratch_idx, + .scratch_idx = subpx_scratch.imageIndex(scratch_idx), .global_subx = comm.globalSubpxForReport( tile.scratch_x_px_min, sub_samp, diff --git a/src/riley/zig/rasterengineglobal.zig b/src/riley/zig/rasterengineglobal.zig new file mode 100644 index 00000000..3cff9c20 --- /dev/null +++ b/src/riley/zig/rasterengineglobal.zig @@ -0,0 +1,15 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const cfg = @import("buildconfig.zig").config; +const impl = if (cfg.simd == .on) + @import("rasterengineglobal_simd.zig") +else + @import("rasterengineglobal_scalar.zig"); + +pub const rasterScene = impl.rasterScene; diff --git a/src/riley/zig/rasterengineglobal_common.zig b/src/riley/zig/rasterengineglobal_common.zig new file mode 100644 index 00000000..723aceca --- /dev/null +++ b/src/riley/zig/rasterengineglobal_common.zig @@ -0,0 +1,51 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const std = @import("std"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const ndarray = @import("ndarray.zig"); +const rops = @import("rasterops.zig"); +const report = @import("report.zig"); +const rasterengine = @import("rasterengine_common.zig"); +const mo = @import("meshpipeline.zig"); +const subpxframe = @import("subpxframe.zig"); + +// -------------------------------------------------------------------------------------- +// Public Entry-Point Func +// -------------------------------------------------------------------------------------- + +pub fn rasterScene( + comptime RasterBackend: type, + comptime report_mode: report.ReportMode, + outer_alloc: std.mem.Allocator, + io: std.Io, + ctx_rast: rops.RasterContext, + ctx_report: report.ReportContext(report_mode), + requested_workers: u16, + tiling: rops.TilingOverlaps, + meshes: []const mo.MeshPrepared, + raster_hulls: []const ?ndarray.NDArray(F), + target: *subpxframe.SubpxTarget, + image_out_arr: *ndarray.NDArray(F), +) !void { + try rasterengine.rasterSceneGlobalComm( + RasterBackend, + report_mode, + outer_alloc, + io, + ctx_rast, + ctx_report, + requested_workers, + tiling, + meshes, + raster_hulls, + target, + image_out_arr, + ); +} diff --git a/src/riley/zig/rasterengineglobal_scalar.zig b/src/riley/zig/rasterengineglobal_scalar.zig new file mode 100644 index 00000000..e55ad60a --- /dev/null +++ b/src/riley/zig/rasterengineglobal_scalar.zig @@ -0,0 +1,139 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const std = @import("std"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const ndarray = @import("ndarray.zig"); +const rops = @import("rasterops.zig"); +const report = @import("report.zig"); +const backend = @import("rasterengine_scalar.zig"); +const common = @import("rasterengineglobal_common.zig"); +const mo = @import("meshpipeline.zig"); +const subpxframe = @import("subpxframe.zig"); + +const GlobalSubpxScratchBuffs = struct { + stride_subpx: usize, + inv_z: []F, + image: @import("matslice.zig").MatSlice(F), + filter_tmp: @import("matslice.zig").MatSlice(F), + touched_min_x: []usize, + touched_max_x: []usize, + ideal_pix_cent: []F, + target_stride_subpx: usize = 0, + target_subx_min: i32 = 0, + target_suby_min: i32 = 0, + tile_subx_min: i32 = 0, + tile_suby_min: i32 = 0, + + pub inline fn imageIndex( + self: *const GlobalSubpxScratchBuffs, + local_idx: usize, + ) usize { + const local_subx = local_idx % self.stride_subpx; + const local_suby = local_idx / self.stride_subpx; + const global_subx = self.tile_subx_min + @as(i32, @intCast(local_subx)); + const global_suby = self.tile_suby_min + @as(i32, @intCast(local_suby)); + const target_subx = global_subx - self.target_subx_min; + const target_suby = global_suby - self.target_suby_min; + return @as(usize, @intCast(target_suby)) * self.target_stride_subpx + + @as(usize, @intCast(target_subx)); + } +}; + +pub const GlobalBackend = struct { + pub const SubpxScratchBuffs = GlobalSubpxScratchBuffs; + + pub fn initSubpxScratch( + arena_alloc: std.mem.Allocator, + fields_num: u8, + subpx_tile_size: usize, + ) !GlobalSubpxScratchBuffs { + const total = subpx_tile_size * subpx_tile_size; + const image_mem = try arena_alloc.alloc(F, 0); + return .{ + .stride_subpx = subpx_tile_size, + .inv_z = try arena_alloc.alloc(F, total), + .image = @import("matslice.zig").MatSlice(F).init(image_mem, fields_num, 0), + .filter_tmp = @import("matslice.zig").MatSlice(F).init( + image_mem, + fields_num, + 0, + ), + .touched_min_x = try arena_alloc.alloc(usize, subpx_tile_size), + .touched_max_x = try arena_alloc.alloc(usize, subpx_tile_size), + .ideal_pix_cent = try arena_alloc.alloc(F, total * 2), + }; + } + + pub fn resetSubpxScratch( + scratch: *GlobalSubpxScratchBuffs, + subpx_tile_size: usize, + _: F, + ) void { + @memset(scratch.inv_z, -std.math.inf(F)); + @memset(scratch.touched_min_x, subpx_tile_size); + @memset(scratch.touched_max_x, 0); + } + + pub fn configureTarget( + scratch: *GlobalSubpxScratchBuffs, + target: *subpxframe.SubpxTarget, + tile: rops.ActiveTile, + sub_sample: u32, + ) void { + scratch.image = target.image; + scratch.target_stride_subpx = target.domain.storage_w_subpx; + scratch.target_subx_min = target.global_subx_min; + scratch.target_suby_min = target.global_suby_min; + scratch.tile_subx_min = tile.scratch_x_px_min * @as(i32, @intCast(sub_sample)); + scratch.tile_suby_min = tile.scratch_y_px_min * @as(i32, @intCast(sub_sample)); + } + + pub fn RasterEngine( + comptime Geom: type, + comptime ShaderKern: type, + comptime ShaderData: type, + ) type { + return backend.RasterEngineFor( + GlobalSubpxScratchBuffs, + Geom, + ShaderKern, + ShaderData, + ); + } +}; + +pub fn rasterScene( + comptime report_mode: report.ReportMode, + outer_alloc: std.mem.Allocator, + io: std.Io, + ctx_rast: rops.RasterContext, + ctx_report: report.ReportContext(report_mode), + requested_workers: u16, + tiling: rops.TilingOverlaps, + meshes: []const mo.MeshPrepared, + raster_hulls: []const ?ndarray.NDArray(F), + target: *subpxframe.SubpxTarget, + image_out_arr: *ndarray.NDArray(F), +) !void { + try common.rasterScene( + GlobalBackend, + report_mode, + outer_alloc, + io, + ctx_rast, + ctx_report, + requested_workers, + tiling, + meshes, + raster_hulls, + target, + image_out_arr, + ); +} diff --git a/src/riley/zig/rasterengineglobal_simd.zig b/src/riley/zig/rasterengineglobal_simd.zig new file mode 100644 index 00000000..795677ea --- /dev/null +++ b/src/riley/zig/rasterengineglobal_simd.zig @@ -0,0 +1,146 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const std = @import("std"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const ndarray = @import("ndarray.zig"); +const rops = @import("rasterops.zig"); +const report = @import("report.zig"); +const backend = @import("rasterengine_simd.zig"); +const common = @import("rasterengineglobal_common.zig"); +const mo = @import("meshpipeline.zig"); +const subpxframe = @import("subpxframe.zig"); + +const GlobalSubpxScratchBuffs = struct { + stride_subpx: usize, + inv_z: []align(64) F, + image: @import("matslice.zig").MatSlice(F), + filter_tmp: @import("matslice.zig").MatSlice(F), + simd_chunks: []backend.SubpxSimdChunk, + mask: []align(64) bool, + xi: []align(64) F, + eta: []align(64) F, + touched_min_x: []usize, + touched_max_x: []usize, + ideal_pix_cent: []align(64) F, + target_stride_subpx: usize = 0, + target_subx_min: i32 = 0, + target_suby_min: i32 = 0, + tile_subx_min: i32 = 0, + tile_suby_min: i32 = 0, + + pub inline fn imageIndex( + self: *const GlobalSubpxScratchBuffs, + local_idx: usize, + ) usize { + const local_subx = local_idx % self.stride_subpx; + const local_suby = local_idx / self.stride_subpx; + const global_subx = self.tile_subx_min + @as(i32, @intCast(local_subx)); + const global_suby = self.tile_suby_min + @as(i32, @intCast(local_suby)); + const target_subx = global_subx - self.target_subx_min; + const target_suby = global_suby - self.target_suby_min; + return @as(usize, @intCast(target_suby)) * self.target_stride_subpx + + @as(usize, @intCast(target_subx)); + } +}; + +const GlobalBackend = struct { + pub const SubpxScratchBuffs = GlobalSubpxScratchBuffs; + + pub fn initSubpxScratch( + arena_alloc: std.mem.Allocator, + fields_num: u8, + subpx_tile_size: usize, + ) !GlobalSubpxScratchBuffs { + const local = try backend.initSubpxScratch( + arena_alloc, + fields_num, + subpx_tile_size, + ); + return .{ + .stride_subpx = local.stride_subpx, + .inv_z = local.inv_z, + .image = local.image, + .filter_tmp = local.filter_tmp, + .simd_chunks = local.simd_chunks, + .mask = local.mask, + .xi = local.xi, + .eta = local.eta, + .touched_min_x = local.touched_min_x, + .touched_max_x = local.touched_max_x, + .ideal_pix_cent = local.ideal_pix_cent, + }; + } + + pub fn resetSubpxScratch( + scratch: *GlobalSubpxScratchBuffs, + subpx_tile_size: usize, + _: F, + ) void { + @memset(scratch.inv_z, -std.math.inf(F)); + @memset(scratch.touched_min_x, subpx_tile_size); + @memset(scratch.touched_max_x, 0); + } + + pub fn configureTarget( + scratch: *GlobalSubpxScratchBuffs, + target: *subpxframe.SubpxTarget, + tile: rops.ActiveTile, + sub_sample: u32, + ) void { + scratch.image = target.image; + scratch.target_stride_subpx = target.domain.storage_w_subpx; + scratch.target_subx_min = target.global_subx_min; + scratch.target_suby_min = target.global_suby_min; + scratch.tile_subx_min = tile.scratch_x_px_min * @as(i32, @intCast(sub_sample)); + scratch.tile_suby_min = tile.scratch_y_px_min * @as(i32, @intCast(sub_sample)); + } + + pub fn RasterEngine( + comptime Geom: type, + comptime ShaderKern: type, + comptime ShaderData: type, + ) type { + return backend.RasterEngineFor( + GlobalSubpxScratchBuffs, + Geom, + ShaderKern, + ShaderData, + ); + } +}; + +pub fn rasterScene( + comptime report_mode: report.ReportMode, + outer_alloc: std.mem.Allocator, + io: std.Io, + ctx_rast: rops.RasterContext, + ctx_report: report.ReportContext(report_mode), + requested_workers: u16, + tiling: rops.TilingOverlaps, + meshes: []const mo.MeshPrepared, + raster_hulls: []const ?ndarray.NDArray(F), + target: *subpxframe.SubpxTarget, + image_out_arr: *ndarray.NDArray(F), +) !void { + try common.rasterScene( + GlobalBackend, + report_mode, + outer_alloc, + io, + ctx_rast, + ctx_report, + requested_workers, + tiling, + meshes, + raster_hulls, + target, + image_out_arr, + ); +} diff --git a/src/riley/zig/report.zig b/src/riley/zig/report.zig index 990aa18e..2d64e76d 100644 --- a/src/riley/zig/report.zig +++ b/src/riley/zig/report.zig @@ -1930,7 +1930,6 @@ pub fn printRenderSummary( cameras[0].sub_sample, cameras[0].prep_psf.halo_px, ); - _ = actual_tile_size; const total_frames = cameras.len * num_time; const total_render_ms = end_to_end_times.total_time / 1e6; @@ -1969,10 +1968,23 @@ pub fn printRenderSummary( print_break, print_break, }); - // try writer.print("Actual Tile Size = {d}x{d}\n", .{ - // actual_tile_size, - // actual_tile_size, - // }); + try writer.print("Buffer Mode = {s}\n", .{ + @tagName(config.buffer_mode), + }); + if (config.buffer_mode != .tile_local) { + const global_tile_subpx = @as(usize, actual_tile_size) * + @as(usize, cameras[0].sub_sample); + const requested_stripe_subpx = config.global_subpx_stripe_size_override orelse + config.global_subpx_stripe_size_min; + const stripe_subpx = @max( + @as(usize, cameras[0].sub_sample), + (@as(usize, requested_stripe_subpx) / + @as(usize, cameras[0].sub_sample)) * + @as(usize, cameras[0].sub_sample), + ); + try writer.print("Global Raster Tile = {d} subpx\n", .{global_tile_subpx}); + try writer.print("Global Stripe Height = {d} subpx\n", .{stripe_subpx}); + } try writer.print("Setup Time = {d:.3} ms\n", .{setup_ms}); // try writer.print("Setup other = {d:.3} ms\n", .{ // setup_other_ms, diff --git a/src/riley/zig/riley.zig b/src/riley/zig/riley.zig index 2f54c241..4ca4b3f1 100644 --- a/src/riley/zig/riley.zig +++ b/src/riley/zig/riley.zig @@ -30,9 +30,13 @@ const valinp = @import("validateinput.zig"); const geomkerns = @import("geometrykernels.zig"); const shadekerns = @import("shaderkernels.zig"); const rasterengine = @import("rasterengine.zig"); +const rasterengineglobal = @import("rasterengineglobal.zig"); +const scratchresolveglobal = @import("scratchresolveglobal.zig"); +const subpxframe = @import("subpxframe.zig"); const rastcfg = @import("rasterconfig.zig"); pub const RasterConfig = rastcfg.RasterConfig; +pub const BufferMode = rastcfg.BufferMode; pub const ImageSaveMode = rastcfg.ImageSaveMode; pub const SaveStrategy = rastcfg.SaveStrategy; pub const RenderMode = rastcfg.RenderMode; @@ -1012,25 +1016,121 @@ fn sceneTileOverlapBinning( ); const time_start_overlap = Timestamp.now(io, .awake); - ctx.tiling = try rops.sceneTileElemOverlap( - arena_alloc, - chunk_exec, - scalingpolicy.geometryWorkers(geom_workers), - ctx.actual_tile_size, - tiles_num_x, - tiles_num_y, - @intCast(job.camera.pixels_num[0]), - @intCast(job.camera.pixels_num[1]), - job.config.raster_halo_px_override orelse job.camera.prep_psf.halo_px, - ctx.elems_in_image_by_mesh, - ctx.elem_bboxes_by_mesh, - ); + ctx.tiling = if (job.config.buffer_mode == .tile_local) + try rops.sceneTileElemOverlap( + arena_alloc, + chunk_exec, + scalingpolicy.geometryWorkers(geom_workers), + ctx.actual_tile_size, + tiles_num_x, + tiles_num_y, + @intCast(job.camera.pixels_num[0]), + @intCast(job.camera.pixels_num[1]), + job.config.raster_halo_px_override orelse job.camera.prep_psf.halo_px, + ctx.elems_in_image_by_mesh, + ctx.elem_bboxes_by_mesh, + ) + else + try sceneGlobalTileElemOverlap( + arena_alloc, + ctx.actual_tile_size, + @intCast(job.camera.pixels_num[0]), + @intCast(job.camera.pixels_num[1]), + 0, + @intCast(job.camera.pixels_num[1]), + job.config.raster_halo_px_override orelse job.camera.prep_psf.halo_px, + ctx.elems_in_image_by_mesh, + ctx.elem_bboxes_by_mesh, + ); const time_end_overlap = Timestamp.now(io, .awake); ctx.frame_times.tile_overlap = @floatFromInt( time_start_overlap.durationTo(time_end_overlap).raw.nanoseconds, ); } +fn sceneGlobalTileElemOverlap( + outer_alloc: std.mem.Allocator, + tile_size: u16, + screen_px_x: u16, + screen_px_y: u16, + core_y_px_min: u16, + core_y_px_max: u16, + halo_px: u16, + elems_in_image_by_mesh: []const usize, + elem_bboxes_by_mesh: []const []rops.ElemBBox, +) !rops.TilingOverlaps { + const tiles_x = try std.math.divCeil(usize, screen_px_x, tile_size); + std.debug.assert(core_y_px_min < core_y_px_max); + std.debug.assert(core_y_px_max <= screen_px_y); + const tiles_y = try std.math.divCeil( + usize, + core_y_px_max - core_y_px_min, + tile_size, + ); + var tiles: std.ArrayList(rops.ActiveTile) = .empty; + defer tiles.deinit(outer_alloc); + var overlaps: std.ArrayList(rops.OverlapBBox) = .empty; + defer overlaps.deinit(outer_alloc); + + for (0..tiles_y) |ty| { + const y_min: u16 = @intCast(core_y_px_min + ty * tile_size); + const y_max = @min( + core_y_px_max, + @as(u16, @intCast(core_y_px_min + (ty + 1) * tile_size)), + ); + for (0..tiles_x) |tx| { + const x_min: u16 = @intCast(tx * tile_size); + const x_max = @min(screen_px_x, @as(u16, @intCast((tx + 1) * tile_size))); + const scratch_x_min: i32 = @as(i32, x_min) - if (tx == 0) halo_px else 0; + const scratch_x_max: i32 = @as(i32, x_max) + + if (tx + 1 == tiles_x) halo_px else 0; + const scratch_y_min: i32 = @as(i32, y_min) - if (ty == 0) halo_px else 0; + const scratch_y_max: i32 = @as(i32, y_max) + + if (ty + 1 == tiles_y) halo_px else 0; + const overlap_start = overlaps.items.len; + + for (elem_bboxes_by_mesh, 0..) |elem_bboxes, mesh_idx| { + for (elem_bboxes[0..elems_in_image_by_mesh[mesh_idx]]) |elem_bbox| { + const overlap_x_min = @max(elem_bbox.x_min, scratch_x_min); + const overlap_x_max = @min(elem_bbox.x_max, scratch_x_max); + const overlap_y_min = @max(elem_bbox.y_min, scratch_y_min); + const overlap_y_max = @min(elem_bbox.y_max, scratch_y_max); + if (overlap_x_min >= overlap_x_max or + overlap_y_min >= overlap_y_max) + { + continue; + } + try overlaps.append(outer_alloc, .{ + .mesh_idx = mesh_idx, + .elem_idx = elem_bbox.elem_idx, + .x_min = overlap_x_min, + .x_max = overlap_x_max, + .y_min = overlap_y_min, + .y_max = overlap_y_max, + }); + } + } + if (overlaps.items.len == overlap_start) continue; + try tiles.append(outer_alloc, .{ + .overlap_start = overlap_start, + .overlap_count = overlaps.items.len - overlap_start, + .x_px_min = x_min, + .y_px_min = y_min, + .x_px_max = x_max, + .y_px_max = y_max, + .scratch_x_px_min = scratch_x_min, + .scratch_y_px_min = scratch_y_min, + .scratch_x_px_max = scratch_x_max, + .scratch_y_px_max = scratch_y_max, + }); + } + } + return .{ + .active_tiles = try tiles.toOwnedSlice(outer_alloc), + .overlaps = try overlaps.toOwnedSlice(outer_alloc), + }; +} + fn runRasterStage( outer_alloc: std.mem.Allocator, io: std.Io, @@ -1315,14 +1415,24 @@ fn prepareFrameContext( input: *const FrameJobDesc, ) !void { const arena_alloc = ctx.arena.allocator(); - ctx.actual_tile_size = scalingpolicy.tileSize( - input.config.tile_size_override, - input.config.tile_size_min, - input.config.tile_size_max, - input.camera.pixels_num, - input.camera.sub_sample, - input.config.raster_halo_px_override orelse input.camera.prep_psf.halo_px, - ); + ctx.actual_tile_size = switch (input.config.buffer_mode) { + .tile_local => scalingpolicy.tileSize( + input.config.tile_size_override, + input.config.tile_size_min, + input.config.tile_size_max, + input.camera.pixels_num, + input.camera.sub_sample, + input.config.raster_halo_px_override orelse input.camera.prep_psf.halo_px, + ), + .global_subpx_full, .global_subpx_stripe => blk: { + const requested_subpx = input.config.global_subpx_tile_size_override orelse + input.config.global_subpx_tile_size_min; + break :blk @divExact( + requested_subpx, + @as(u16, @intCast(input.camera.sub_sample)), + ); + }, + }; ctx.report_storage = try initFrameReportStorage( outer_alloc, @@ -1445,25 +1555,160 @@ fn rasterFrame( .frame_idx = input.frame_idx, .tile_size = ctx.actual_tile_size, }; + var global_resolve_time_ns: F = 0.0; - try rasterengine.rasterScene( - report_mode, - outer_alloc, - io, - ctx_rast, - ctx_report, - raster_workers, - ctx.tiling.?, - ctx.prep_meshes, - ctx.raster_hulls, - &ctx.frame_arr, - ); + switch (input.config.buffer_mode) { + .tile_local => try rasterengine.rasterScene( + report_mode, + outer_alloc, + io, + ctx_rast, + ctx_report, + raster_workers, + ctx.tiling.?, + ctx.prep_meshes, + ctx.raster_hulls, + &ctx.frame_arr, + ), + .global_subpx_full => { + const sub_samp: usize = @intCast(input.camera.sub_sample); + const halo_px = input.config.raster_halo_px_override orelse + input.camera.prep_psf.halo_px; + const halo_subpx = @as(usize, halo_px) * sub_samp; + const domain = try subpxframe.SubpxFrameDomain.init( + input.num_fields, + input.camera.pixels_num, + input.camera.sub_sample, + halo_subpx, + ); + var target = try subpxframe.SubpxTarget.init( + outer_alloc, + domain, + -@as(i32, @intCast(halo_subpx)), + -@as(i32, @intCast(halo_subpx)), + input.config.background_value, + ); + defer target.deinit(outer_alloc); + + try rasterengineglobal.rasterScene( + report_mode, + outer_alloc, + io, + ctx_rast, + ctx_report, + raster_workers, + ctx.tiling.?, + ctx.prep_meshes, + ctx.raster_hulls, + &target, + &ctx.frame_arr, + ); + const time_start_resolve = Timestamp.now(io, .awake); + scratchresolveglobal.resolve( + &target, + input.camera, + input.config.background_value, + &ctx.frame_arr, + ); + global_resolve_time_ns = @floatFromInt( + time_start_resolve.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, + ); + }, + .global_subpx_stripe => { + const sub_samp: usize = @intCast(input.camera.sub_sample); + const halo_px = input.config.raster_halo_px_override orelse + input.camera.prep_psf.halo_px; + const halo_subpx = @as(usize, halo_px) * sub_samp; + const image_w_subpx = @as(usize, input.camera.pixels_num[0]) * sub_samp; + const image_h_subpx = @as(usize, input.camera.pixels_num[1]) * sub_samp; + const requested_stripe_subpx = + input.config.global_subpx_stripe_size_override orelse + input.config.global_subpx_stripe_size_min; + const stripe_subpx: usize = @divExact( + @as(usize, requested_stripe_subpx), + sub_samp, + ); + const first_core_suby_max = @min(image_h_subpx, stripe_subpx); + var stripe = try subpxframe.SubpxStripe.init( + outer_alloc, + input.num_fields, + image_w_subpx, + 0, + @intCast(first_core_suby_max), + halo_subpx, + halo_subpx, + input.config.background_value, + ); + defer stripe.deinit(outer_alloc); + + var core_suby_min: usize = 0; + while (core_suby_min < image_h_subpx) { + const core_suby_max = @min( + image_h_subpx, + core_suby_min + stripe_subpx, + ); + stripe.reset( + @intCast(core_suby_min), + @intCast(core_suby_max), + halo_subpx, + input.config.background_value, + ); + const stripe_tiling = try sceneGlobalTileElemOverlap( + outer_alloc, + ctx.actual_tile_size, + @intCast(input.camera.pixels_num[0]), + @intCast(input.camera.pixels_num[1]), + @intCast(core_suby_min / sub_samp), + @intCast(core_suby_max / sub_samp), + halo_px, + ctx.elems_in_image_by_mesh, + ctx.elem_bboxes_by_mesh, + ); + errdefer { + outer_alloc.free(stripe_tiling.active_tiles); + outer_alloc.free(stripe_tiling.overlaps); + } + + try rasterengineglobal.rasterScene( + report_mode, + outer_alloc, + io, + ctx_rast, + ctx_report, + raster_workers, + stripe_tiling, + ctx.prep_meshes, + ctx.raster_hulls, + &stripe.target, + &ctx.frame_arr, + ); + const time_start_resolve = Timestamp.now(io, .awake); + scratchresolveglobal.resolveRows( + &stripe.target, + input.camera, + input.config.background_value, + &ctx.frame_arr, + core_suby_min / sub_samp, + core_suby_max / sub_samp, + ); + const time_end_resolve = Timestamp.now(io, .awake); + global_resolve_time_ns += @floatFromInt( + time_start_resolve.durationTo(time_end_resolve).raw.nanoseconds, + ); + outer_alloc.free(stripe_tiling.active_tiles); + outer_alloc.free(stripe_tiling.overlaps); + core_suby_min = core_suby_max; + } + }, + } const time_end_loop = Timestamp.now(io, .awake); ctx.frame_times.raster_loop = @floatFromInt( time_start_loop.durationTo(time_end_loop).raw.nanoseconds, ); - if (report.getBenchLog(report_mode, report_ptr)) |bench_log| { + if (input.config.buffer_mode != .tile_local) { + ctx.frame_times.scratch_resolve = global_resolve_time_ns; + } else if (report.getBenchLog(report_mode, report_ptr)) |bench_log| { ctx.frame_times.cam_invert = bench_log.cam_time_ns; ctx.frame_times.elem_loop = bench_log.elem_time_ns; ctx.frame_times.scratch_resolve = bench_log.resolve_time_ns; diff --git a/src/riley/zig/scratchresolveglobal.zig b/src/riley/zig/scratchresolveglobal.zig new file mode 100644 index 00000000..005465b4 --- /dev/null +++ b/src/riley/zig/scratchresolveglobal.zig @@ -0,0 +1,45 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const cfg = @import("buildconfig.zig").config; +const cam = @import("camera.zig"); +const ndarray = @import("ndarray.zig"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const impl = if (cfg.simd == .on) + @import("scratchresolveglobal_simd.zig") +else + @import("scratchresolveglobal_scalar.zig"); +const subpxframe = @import("subpxframe.zig"); + +pub fn resolve( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), +) void { + impl.resolve(target, camera, background_value, image_out_arr); +} + +pub fn resolveRows( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, +) void { + impl.resolveRows( + target, + camera, + background_value, + image_out_arr, + image_y_min, + image_y_max, + ); +} diff --git a/src/riley/zig/scratchresolveglobal_common.zig b/src/riley/zig/scratchresolveglobal_common.zig new file mode 100644 index 00000000..dc484a13 --- /dev/null +++ b/src/riley/zig/scratchresolveglobal_common.zig @@ -0,0 +1,214 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const std = @import("std"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const cam = @import("camera.zig"); +const ndarray = @import("ndarray.zig"); +const subpxframe = @import("subpxframe.zig"); + +// -------------------------------------------------------------------------------------- +// Public Entry-Point Func +// -------------------------------------------------------------------------------------- + +pub fn resolve( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), +) void { + resolveRows( + target, + camera, + background_value, + image_out_arr, + 0, + target.domain.image_h_subpx / @as(usize, camera.sub_sample), + ); +} + +pub fn resolveRows( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, +) void { + const sub_samp: usize = @intCast(camera.sub_sample); + const prep_psf = camera.prep_psf; + const fields_num: usize = target.domain.fields_num; + const image_w_px = target.domain.image_w_subpx / sub_samp; + std.debug.assert(image_y_min <= image_y_max); + std.debug.assert(image_out_arr.dims[0] == fields_num); + std.debug.assert(image_out_arr.dims[1] >= image_y_max); + std.debug.assert(image_out_arr.dims[2] >= image_w_px); + + for (image_y_min..image_y_max) |yy| { + const global_suby_start = yy * sub_samp; + for (0..image_w_px) |xx| { + const global_subx_start = xx * sub_samp; + for (0..fields_num) |ff| { + var sum: F = 0.0; + for (0..sub_samp) |ssy| { + for (0..sub_samp) |ssx| { + const global_subx: i32 = @intCast(global_subx_start + ssx); + const global_suby: i32 = @intCast(global_suby_start + ssy); + sum += sampleFiltered( + target, + prep_psf, + background_value, + global_subx, + global_suby, + ff, + ); + } + } + const sub_samp_f: F = @floatFromInt(sub_samp); + image_out_arr.slice[image_out_arr.offset3(ff, yy, xx)] = + sum / (sub_samp_f * sub_samp_f); + } + } + } +} + +// -------------------------------------------------------------------------------------- +// Private Func +// -------------------------------------------------------------------------------------- + +fn sampleFiltered( + target: *const subpxframe.SubpxTarget, + prep_psf: cam.PreparedPSF, + background_value: F, + global_subx: i32, + global_suby: i32, + field_idx: usize, +) F { + return switch (prep_psf.mode) { + .identity_fast => sampleTarget( + target, + background_value, + global_subx, + global_suby, + field_idx, + ), + .separable => sampleSeparable( + target, + prep_psf, + background_value, + global_subx, + global_suby, + field_idx, + ), + .nonseparable => sampleNonSeparable( + target, + prep_psf, + background_value, + global_subx, + global_suby, + field_idx, + ), + }; +} + +fn sampleSeparable( + target: *const subpxframe.SubpxTarget, + prep_psf: cam.PreparedPSF, + background_value: F, + global_subx: i32, + global_suby: i32, + field_idx: usize, +) F { + var sum: F = 0.0; + for (prep_psf.weights_y, 0..) |weight_y, yy| { + const y_off: i32 = @intCast(yy); + for (prep_psf.weights_x, 0..) |weight_x, xx| { + const x_off: i32 = @intCast(xx); + const radius_x: i32 = @intCast(prep_psf.radius_x_subpx); + const radius_y: i32 = @intCast(prep_psf.radius_y_subpx); + sum += weight_x * weight_y * sampleTarget( + target, + background_value, + global_subx + x_off - radius_x, + global_suby + y_off - radius_y, + field_idx, + ); + } + } + return sum; +} + +fn sampleNonSeparable( + target: *const subpxframe.SubpxTarget, + prep_psf: cam.PreparedPSF, + background_value: F, + global_subx: i32, + global_suby: i32, + field_idx: usize, +) F { + const kernel_w = 2 * prep_psf.radius_x_subpx + 1; + var sum: F = 0.0; + for (prep_psf.weights_2d, 0..) |weight, kk| { + const kernel_x = kk % kernel_w; + const kernel_y = kk / kernel_w; + const x_off: i32 = @intCast(kernel_x); + const y_off: i32 = @intCast(kernel_y); + const radius_x: i32 = @intCast(prep_psf.radius_x_subpx); + const radius_y: i32 = @intCast(prep_psf.radius_y_subpx); + sum += weight * sampleTarget( + target, + background_value, + global_subx + x_off - radius_x, + global_suby + y_off - radius_y, + field_idx, + ); + } + return sum; +} + +fn sampleTarget( + target: *const subpxframe.SubpxTarget, + background_value: F, + global_subx: i32, + global_suby: i32, + field_idx: usize, +) F { + const local_subx = global_subx - target.global_subx_min; + const local_suby = global_suby - target.global_suby_min; + if (local_subx < 0 or local_suby < 0 or + local_subx >= @as(i32, @intCast(target.domain.storage_w_subpx)) or + local_suby >= @as(i32, @intCast(target.domain.storage_h_subpx))) + { + return background_value; + } + + const flat_idx = @as(usize, @intCast(local_suby)) * target.domain.storage_w_subpx + + @as(usize, @intCast(local_subx)); + return target.image.slice[target.image.rowBase(field_idx) + flat_idx]; +} + +// -------------------------------------------------------------------------------------- +// Tests +// -------------------------------------------------------------------------------------- + +test "sampleTarget uses the target global origin" { + const domain = try subpxframe.SubpxFrameDomain.init(1, .{ 2, 2 }, 1, 1); + var target = try subpxframe.SubpxTarget.init( + std.testing.allocator, + domain, + -1, + -1, + 0.0, + ); + defer target.deinit(std.testing.allocator); + + target.image.slice[target.image.rowBase(0) + target.flatIndex(0, 1)] = 7.0; + try std.testing.expectEqual(@as(F, 7.0), sampleTarget(&target, -1.0, 0, 1, 0)); + try std.testing.expectEqual(@as(F, -1.0), sampleTarget(&target, -1.0, 3, 1, 0)); +} diff --git a/src/riley/zig/scratchresolveglobal_scalar.zig b/src/riley/zig/scratchresolveglobal_scalar.zig new file mode 100644 index 00000000..bd949734 --- /dev/null +++ b/src/riley/zig/scratchresolveglobal_scalar.zig @@ -0,0 +1,41 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const cam = @import("camera.zig"); +const ndarray = @import("ndarray.zig"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const common = @import("scratchresolveglobal_common.zig"); +const subpxframe = @import("subpxframe.zig"); + +pub fn resolve( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), +) void { + common.resolve(target, camera, background_value, image_out_arr); +} + +pub fn resolveRows( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, +) void { + common.resolveRows( + target, + camera, + background_value, + image_out_arr, + image_y_min, + image_y_max, + ); +} diff --git a/src/riley/zig/scratchresolveglobal_simd.zig b/src/riley/zig/scratchresolveglobal_simd.zig new file mode 100644 index 00000000..bd949734 --- /dev/null +++ b/src/riley/zig/scratchresolveglobal_simd.zig @@ -0,0 +1,41 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const cam = @import("camera.zig"); +const ndarray = @import("ndarray.zig"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const common = @import("scratchresolveglobal_common.zig"); +const subpxframe = @import("subpxframe.zig"); + +pub fn resolve( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), +) void { + common.resolve(target, camera, background_value, image_out_arr); +} + +pub fn resolveRows( + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, +) void { + common.resolveRows( + target, + camera, + background_value, + image_out_arr, + image_y_min, + image_y_max, + ); +} diff --git a/src/riley/zig/subpxframe.zig b/src/riley/zig/subpxframe.zig new file mode 100644 index 00000000..b692b475 --- /dev/null +++ b/src/riley/zig/subpxframe.zig @@ -0,0 +1,278 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const std = @import("std"); +const buildconfig = @import("buildconfig.zig"); +const F = buildconfig.F; +const MatSlice = @import("matslice.zig").MatSlice; + +// -------------------------------------------------------------------------------------- +// Public Constants & Public Types +// -------------------------------------------------------------------------------------- + +pub const SubpxFrameDomain = struct { + fields_num: u8, + image_w_subpx: usize, + image_h_subpx: usize, + halo_subpx: usize, + storage_w_subpx: usize, + storage_h_subpx: usize, + + pub fn init( + fields_num: u8, + pixels_num: [2]u32, + sub_samp: u32, + halo_subpx: usize, + ) !SubpxFrameDomain { + const image_w_subpx = try std.math.mul( + usize, + pixels_num[0], + sub_samp, + ); + const image_h_subpx = try std.math.mul( + usize, + pixels_num[1], + sub_samp, + ); + const halo_twice = try std.math.mul(usize, halo_subpx, 2); + + return .{ + .fields_num = fields_num, + .image_w_subpx = image_w_subpx, + .image_h_subpx = image_h_subpx, + .halo_subpx = halo_subpx, + .storage_w_subpx = try std.math.add( + usize, + image_w_subpx, + halo_twice, + ), + .storage_h_subpx = try std.math.add( + usize, + image_h_subpx, + halo_twice, + ), + }; + } +}; + +pub const SubpxTarget = struct { + domain: SubpxFrameDomain, + image: MatSlice(F), + global_subx_min: i32, + global_suby_min: i32, + + pub fn init( + outer_alloc: std.mem.Allocator, + domain: SubpxFrameDomain, + global_subx_min: i32, + global_suby_min: i32, + background_value: F, + ) !SubpxTarget { + const samples_num = try std.math.mul( + usize, + domain.storage_w_subpx, + domain.storage_h_subpx, + ); + const total_num = try std.math.mul( + usize, + samples_num, + domain.fields_num, + ); + const image_mem = try outer_alloc.alloc(F, total_num); + errdefer outer_alloc.free(image_mem); + @memset(image_mem, background_value); + + return .{ + .domain = domain, + .image = MatSlice(F).init( + image_mem, + domain.fields_num, + samples_num, + ), + .global_subx_min = global_subx_min, + .global_suby_min = global_suby_min, + }; + } + + pub fn deinit( + self: *SubpxTarget, + outer_alloc: std.mem.Allocator, + ) void { + outer_alloc.free(self.image.slice); + self.* = undefined; + } + + pub inline fn flatIndex( + self: *const SubpxTarget, + global_subx: i32, + global_suby: i32, + ) usize { + const local_subx = global_subx - self.global_subx_min; + const local_suby = global_suby - self.global_suby_min; + std.debug.assert(local_subx >= 0); + std.debug.assert(local_suby >= 0); + const local_x: usize = @intCast(local_subx); + const local_y: usize = @intCast(local_suby); + std.debug.assert(local_x < self.domain.storage_w_subpx); + std.debug.assert(local_y < self.domain.storage_h_subpx); + return local_y * self.domain.storage_w_subpx + local_x; + } +}; + +pub const SubpxStripe = struct { + target: SubpxTarget, + core_suby_min: i32, + core_suby_max: i32, + + pub fn init( + outer_alloc: std.mem.Allocator, + fields_num: u8, + image_w_subpx: usize, + core_suby_min: i32, + core_suby_max: i32, + halo_subpx_x: usize, + halo_subpx_y: usize, + background_value: F, + ) !SubpxStripe { + std.debug.assert(core_suby_min < core_suby_max); + const core_h_subpx: usize = @intCast(core_suby_max - core_suby_min); + const domain = try SubpxFrameDomain.init( + fields_num, + .{ @intCast(image_w_subpx), @intCast(core_h_subpx) }, + 1, + 0, + ); + const storage_w_subpx = try std.math.add( + usize, + domain.image_w_subpx, + try std.math.mul(usize, halo_subpx_x, 2), + ); + const storage_h_subpx = try std.math.add( + usize, + domain.image_h_subpx, + try std.math.mul(usize, halo_subpx_y, 2), + ); + const stripe_domain = SubpxFrameDomain{ + .fields_num = fields_num, + .image_w_subpx = domain.image_w_subpx, + .image_h_subpx = domain.image_h_subpx, + .halo_subpx = 0, + .storage_w_subpx = storage_w_subpx, + .storage_h_subpx = storage_h_subpx, + }; + + return .{ + .target = try SubpxTarget.init( + outer_alloc, + stripe_domain, + -@as(i32, @intCast(halo_subpx_x)), + core_suby_min - @as(i32, @intCast(halo_subpx_y)), + background_value, + ), + .core_suby_min = core_suby_min, + .core_suby_max = core_suby_max, + }; + } + + pub fn deinit( + self: *SubpxStripe, + outer_alloc: std.mem.Allocator, + ) void { + self.target.deinit(outer_alloc); + self.* = undefined; + } + + pub fn reset( + self: *SubpxStripe, + core_suby_min: i32, + core_suby_max: i32, + halo_subpx_y: usize, + background_value: F, + ) void { + const core_h_subpx: usize = @intCast(core_suby_max - core_suby_min); + std.debug.assert(core_suby_min < core_suby_max); + std.debug.assert( + core_h_subpx + 2 * halo_subpx_y <= + self.target.domain.storage_h_subpx, + ); + + @memset(self.target.image.slice, background_value); + self.target.global_suby_min = core_suby_min - @as( + i32, + @intCast(halo_subpx_y), + ); + self.core_suby_min = core_suby_min; + self.core_suby_max = core_suby_max; + } +}; + +// -------------------------------------------------------------------------------------- +// Tests +// -------------------------------------------------------------------------------------- + +test "SubpxTarget maps global coordinates through outer halo" { + const domain = try SubpxFrameDomain.init(1, .{ 3, 2 }, 4, 2); + var target = try SubpxTarget.init( + std.testing.allocator, + domain, + -2, + -2, + 0.0, + ); + defer target.deinit(std.testing.allocator); + + try std.testing.expectEqual(@as(usize, 0), target.flatIndex(-2, -2)); + try std.testing.expectEqual(@as(usize, 2), target.flatIndex(0, -2)); + try std.testing.expectEqual( + domain.storage_w_subpx + 2, + target.flatIndex(0, -1), + ); +} + +test "SubpxStripe covers its core plus only stripe-edge halos" { + var stripe = try SubpxStripe.init( + std.testing.allocator, + 1, + 24, + 8, + 16, + 2, + 3, + 0.0, + ); + defer stripe.deinit(std.testing.allocator); + + try std.testing.expectEqual(@as(i32, -2), stripe.target.global_subx_min); + try std.testing.expectEqual(@as(i32, 5), stripe.target.global_suby_min); + try std.testing.expectEqual(@as(usize, 28), stripe.target.domain.storage_w_subpx); + try std.testing.expectEqual(@as(usize, 14), stripe.target.domain.storage_h_subpx); + try std.testing.expectEqual(@as(i32, 8), stripe.core_suby_min); + try std.testing.expectEqual(@as(i32, 16), stripe.core_suby_max); +} + +test "SubpxStripe reset reuses storage for a shorter final stripe" { + var stripe = try SubpxStripe.init( + std.testing.allocator, + 1, + 12, + 0, + 8, + 1, + 2, + 0.0, + ); + defer stripe.deinit(std.testing.allocator); + + stripe.target.image.slice[0] = 3.0; + stripe.reset(8, 12, 2, -1.0); + + try std.testing.expectEqual(@as(i32, 6), stripe.target.global_suby_min); + try std.testing.expectEqual(@as(i32, 8), stripe.core_suby_min); + try std.testing.expectEqual(@as(i32, 12), stripe.core_suby_max); + try std.testing.expectEqual(@as(F, -1.0), stripe.target.image.slice[0]); +} diff --git a/src/riley/zig/subpxtileops.zig b/src/riley/zig/subpxtileops.zig new file mode 100644 index 00000000..3fde333e --- /dev/null +++ b/src/riley/zig/subpxtileops.zig @@ -0,0 +1,233 @@ +// -------------------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------------------- +const std = @import("std"); +const rops = @import("rasterops.zig"); + +// -------------------------------------------------------------------------------------- +// Public Constants & Public Types +// -------------------------------------------------------------------------------------- + +pub const SubpxTile = struct { + subx_min: i32, + subx_max: i32, + suby_min: i32, + suby_max: i32, + overlap_start: usize = 0, + overlap_count: usize = 0, +}; + +pub const SubpxOverlap = struct { + mesh_idx: usize, + elem_idx: usize, + subx_min: i32, + subx_max: i32, + suby_min: i32, + suby_max: i32, +}; + +pub const SubpxTilingOverlaps = struct { + tiles: []SubpxTile, + overlaps: []SubpxOverlap, + + pub fn deinit( + self: *SubpxTilingOverlaps, + outer_alloc: std.mem.Allocator, + ) void { + outer_alloc.free(self.tiles); + outer_alloc.free(self.overlaps); + self.* = undefined; + } +}; + +// -------------------------------------------------------------------------------------- +// Public Entry-Point Func +// -------------------------------------------------------------------------------------- + +pub fn calcTiles( + outer_alloc: std.mem.Allocator, + subx_min: i32, + subx_max: i32, + suby_min: i32, + suby_max: i32, + tile_size_subpx: u16, +) ![]SubpxTile { + std.debug.assert(subx_min < subx_max); + std.debug.assert(suby_min < suby_max); + std.debug.assert(tile_size_subpx > 0); + + const tile_size: i32 = tile_size_subpx; + const tiles_x = try std.math.divCeil( + usize, + @intCast(subx_max - subx_min), + tile_size_subpx, + ); + const tiles_y = try std.math.divCeil( + usize, + @intCast(suby_max - suby_min), + tile_size_subpx, + ); + const tiles_num = try std.math.mul(usize, tiles_x, tiles_y); + const tiles = try outer_alloc.alloc(SubpxTile, tiles_num); + + for (0..tiles_y) |yy| { + const tile_suby_min = suby_min + @as(i32, @intCast(yy)) * tile_size; + const tile_suby_max = @min(tile_suby_min + tile_size, suby_max); + for (0..tiles_x) |xx| { + const tile_subx_min = subx_min + @as(i32, @intCast(xx)) * tile_size; + const tile_subx_max = @min(tile_subx_min + tile_size, subx_max); + tiles[yy * tiles_x + xx] = .{ + .subx_min = tile_subx_min, + .subx_max = tile_subx_max, + .suby_min = tile_suby_min, + .suby_max = tile_suby_max, + }; + } + } + + return tiles; +} + +pub fn elemBBoxToSubpx( + elem_bbox: rops.ElemBBox, + sub_samp: u32, +) !SubpxOverlap { + const sub_samp_i: i32 = @intCast(sub_samp); + return .{ + .mesh_idx = 0, + .elem_idx = elem_bbox.elem_idx, + .subx_min = try std.math.mul(i32, elem_bbox.x_min, sub_samp_i), + .subx_max = try std.math.mul(i32, elem_bbox.x_max, sub_samp_i), + .suby_min = try std.math.mul(i32, elem_bbox.y_min, sub_samp_i), + .suby_max = try std.math.mul(i32, elem_bbox.y_max, sub_samp_i), + }; +} + +pub fn binElemOverlaps( + outer_alloc: std.mem.Allocator, + tiles_inp: []const SubpxTile, + elem_bboxes_by_mesh: []const []const rops.ElemBBox, + sub_samp: u32, +) !SubpxTilingOverlaps { + std.debug.assert(sub_samp > 0); + const tiles = try outer_alloc.dupe(SubpxTile, tiles_inp); + errdefer outer_alloc.free(tiles); + + var overlaps_num: usize = 0; + for (tiles) |*tile| { + var tile_overlaps: usize = 0; + for (elem_bboxes_by_mesh) |elem_bboxes| { + for (elem_bboxes) |elem_bbox| { + const overlap = try elemBBoxToSubpx(elem_bbox, sub_samp); + if (rangesIntersect(tile, overlap)) { + tile_overlaps += 1; + } + } + } + tile.overlap_start = overlaps_num; + tile.overlap_count = tile_overlaps; + overlaps_num = try std.math.add(usize, overlaps_num, tile_overlaps); + } + + const overlaps = try outer_alloc.alloc(SubpxOverlap, overlaps_num); + errdefer outer_alloc.free(overlaps); + for (tiles) |tile| { + var overlap_idx = tile.overlap_start; + for (elem_bboxes_by_mesh, 0..) |elem_bboxes, mesh_idx| { + for (elem_bboxes) |elem_bbox| { + var overlap = try elemBBoxToSubpx(elem_bbox, sub_samp); + if (!rangesIntersect(&tile, overlap)) continue; + + overlap.mesh_idx = mesh_idx; + overlap.subx_min = @max(overlap.subx_min, tile.subx_min); + overlap.subx_max = @min(overlap.subx_max, tile.subx_max); + overlap.suby_min = @max(overlap.suby_min, tile.suby_min); + overlap.suby_max = @min(overlap.suby_max, tile.suby_max); + overlaps[overlap_idx] = overlap; + overlap_idx += 1; + } + } + std.debug.assert(overlap_idx == tile.overlap_start + tile.overlap_count); + } + + return .{ .tiles = tiles, .overlaps = overlaps }; +} + +fn rangesIntersect( + tile: *const SubpxTile, + overlap: SubpxOverlap, +) bool { + return overlap.subx_min < tile.subx_max and + overlap.subx_max > tile.subx_min and + overlap.suby_min < tile.suby_max and + overlap.suby_max > tile.suby_min; +} + +// -------------------------------------------------------------------------------------- +// Tests +// -------------------------------------------------------------------------------------- + +test "calcTiles partitions a sub-pixel rectangle without halo" { + const tiles = try calcTiles(std.testing.allocator, -2, 7, -1, 5, 4); + defer std.testing.allocator.free(tiles); + + try std.testing.expectEqual(@as(usize, 6), tiles.len); + try std.testing.expectEqual(SubpxTile{ + .subx_min = -2, + .subx_max = 2, + .suby_min = -1, + .suby_max = 3, + }, tiles[0]); + try std.testing.expectEqual(SubpxTile{ + .subx_min = 6, + .subx_max = 7, + .suby_min = 3, + .suby_max = 5, + }, tiles[5]); +} + +test "elemBBoxToSubpx scales conservative pixel bounds" { + const overlap = try elemBBoxToSubpx(.{ + .elem_idx = 3, + .x_min = -2, + .x_max = 7, + .y_min = 1, + .y_max = 4, + }, 8); + + try std.testing.expectEqual(@as(i32, -16), overlap.subx_min); + try std.testing.expectEqual(@as(i32, 56), overlap.subx_max); + try std.testing.expectEqual(@as(i32, 8), overlap.suby_min); + try std.testing.expectEqual(@as(i32, 32), overlap.suby_max); +} + +test "binElemOverlaps gives each halo-free tile clipped overlaps" { + const tiles = try calcTiles(std.testing.allocator, 0, 8, 0, 4, 4); + defer std.testing.allocator.free(tiles); + const mesh0 = [_]rops.ElemBBox{ + .{ .elem_idx = 0, .x_min = 1, .x_max = 3, .y_min = 0, .y_max = 2 }, + .{ .elem_idx = 1, .x_min = 3, .x_max = 5, .y_min = 1, .y_max = 3 }, + }; + const mesh1 = [_]rops.ElemBBox{ + .{ .elem_idx = 0, .x_min = 6, .x_max = 8, .y_min = 0, .y_max = 4 }, + }; + const meshes = [_][]const rops.ElemBBox{ &mesh0, &mesh1 }; + var tiling = try binElemOverlaps( + std.testing.allocator, + tiles, + &meshes, + 1, + ); + defer tiling.deinit(std.testing.allocator); + + try std.testing.expectEqual(@as(usize, 4), tiling.overlaps.len); + try std.testing.expectEqual(@as(usize, 2), tiling.tiles[0].overlap_count); + try std.testing.expectEqual(@as(usize, 2), tiling.tiles[1].overlap_count); + try std.testing.expectEqual(@as(i32, 4), tiling.overlaps[1].subx_max); + try std.testing.expectEqual(@as(usize, 1), tiling.overlaps[3].mesh_idx); +} diff --git a/src/riley/zig/validateinput.zig b/src/riley/zig/validateinput.zig index 75a13ebd..55357316 100644 --- a/src/riley/zig/validateinput.zig +++ b/src/riley/zig/validateinput.zig @@ -87,6 +87,40 @@ pub fn checkRenderInpsErr( return error.InvalidTileSizeOverride; } } + if (config.global_subpx_tile_size_min == 0) { + return error.InvalidGlobalSubpxTileSizeMin; + } + if (config.global_subpx_tile_size_max == 0) { + return error.InvalidGlobalSubpxTileSizeMax; + } + if (config.global_subpx_tile_size_min > config.global_subpx_tile_size_max) { + return error.InvalidGlobalSubpxTileSizeRange; + } + if (config.global_subpx_tile_size_override) |tile_size_override| { + if (tile_size_override < config.global_subpx_tile_size_min or + tile_size_override > config.global_subpx_tile_size_max) + { + return error.InvalidGlobalSubpxTileSizeOverride; + } + } + if (config.global_subpx_stripe_size_min == 0) { + return error.InvalidGlobalSubpxStripeSizeMin; + } + if (config.global_subpx_stripe_size_max == 0) { + return error.InvalidGlobalSubpxStripeSizeMax; + } + if (config.global_subpx_stripe_size_min > + config.global_subpx_stripe_size_max) + { + return error.InvalidGlobalSubpxStripeSizeRange; + } + if (config.global_subpx_stripe_size_override) |stripe_size_override| { + if (stripe_size_override < config.global_subpx_stripe_size_min or + stripe_size_override > config.global_subpx_stripe_size_max) + { + return error.InvalidGlobalSubpxStripeSizeOverride; + } + } if (!std.math.isFinite(config.background_value)) { return error.InvalidBackgroundValue; } @@ -101,6 +135,7 @@ pub fn checkRenderInpsErr( for (cam_inps) |cam_inp| { try checkCamInpErr(cam_inp); + try checkGlobalSubpxAlignment(config, cam_inp.sub_sample); } const num_time = mo.countFrames(meshes); @@ -177,6 +212,29 @@ pub fn checkRenderInpsAssert( std.debug.assert(tile_size_override >= config.tile_size_min); std.debug.assert(tile_size_override <= config.tile_size_max); } + std.debug.assert(config.global_subpx_tile_size_min > 0); + std.debug.assert(config.global_subpx_tile_size_max > 0); + std.debug.assert( + config.global_subpx_tile_size_min <= config.global_subpx_tile_size_max, + ); + if (config.global_subpx_tile_size_override) |tile_size_override| { + std.debug.assert(tile_size_override >= config.global_subpx_tile_size_min); + std.debug.assert(tile_size_override <= config.global_subpx_tile_size_max); + } + std.debug.assert(config.global_subpx_stripe_size_min > 0); + std.debug.assert(config.global_subpx_stripe_size_max > 0); + std.debug.assert( + config.global_subpx_stripe_size_min <= + config.global_subpx_stripe_size_max, + ); + if (config.global_subpx_stripe_size_override) |stripe_size_override| { + std.debug.assert( + stripe_size_override >= config.global_subpx_stripe_size_min, + ); + std.debug.assert( + stripe_size_override <= config.global_subpx_stripe_size_max, + ); + } std.debug.assert(std.math.isFinite(config.background_value)); if (config.save_strategy == .disk or config.save_strategy == .both) { std.debug.assert(config.image_save_opts.len > 0); @@ -187,6 +245,7 @@ pub fn checkRenderInpsAssert( for (cam_inps) |cam_inp| { checkCamInpAssert(cam_inp); + checkGlobalSubpxAlignment(config, cam_inp.sub_sample) catch unreachable; } const num_time = mo.countFrames(meshes); @@ -216,6 +275,26 @@ pub fn checkRenderInpsAssert( }; } +fn checkGlobalSubpxAlignment( + config: rastcfg.RasterConfig, + sub_samp: u32, +) !void { + if (config.buffer_mode == .tile_local) return; + + const tile_size = config.global_subpx_tile_size_override orelse + config.global_subpx_tile_size_min; + if (@mod(tile_size, sub_samp) != 0) { + return error.GlobalSubpxTileSizeNotAligned; + } + if (config.buffer_mode == .global_subpx_stripe) { + const stripe_size = config.global_subpx_stripe_size_override orelse + config.global_subpx_stripe_size_min; + if (@mod(stripe_size, sub_samp) != 0) { + return error.GlobalSubpxStripeSizeNotAligned; + } + } +} + // -------------------------------------------------------------------------------------- // Generic Low-Level Helpers // -------------------------------------------------------------------------------------- diff --git a/src/tests/test_gold_psf.zig b/src/tests/test_gold_psf.zig index 9fb957da..a2ce625e 100644 --- a/src/tests/test_gold_psf.zig +++ b/src/tests/test_gold_psf.zig @@ -9,6 +9,7 @@ const std = @import("std"); const buildconfig = @import("../riley/zig/buildconfig.zig"); const F = buildconfig.F; +const riley = @import("../riley/zig/riley.zig"); const Timestamp = std.Io.Clock.Timestamp; const common = @import("../dev_support/tests.zig"); const suite = @import("../dev_support/psfsuite.zig"); @@ -34,6 +35,11 @@ test "Gold PSF Suite" { std.debug.print("Running Gold PSF Tests...\n", .{}); const suite_start = Timestamp.now(io, .awake); + const buffer_modes = [_]riley.BufferMode{ + .tile_local, + .global_subpx_full, + .global_subpx_stripe, + }; for (suite.distortion_cases) |distortion_case| { for (distortion_case.mesh_types) |mesh_type| { for (suite.shader_cases) |shader_case| { @@ -51,61 +57,72 @@ test "Gold PSF Suite" { "{s}/{s}", .{ suite.gold_root, case_dir_name }, ); - const result = try suite.renderCase(allocator, io, render_case, null); - defer { - allocator.free(result.slice); - var result_mut = result; - result_mut.deinit(allocator); - } - - const frames_num = if (result.dims.len == 5) result.dims[1] else result.dims[0]; - var first_err: ?anyerror = null; - for (0..frames_num) |frame_idx| { - const gold_path = try common.findGoldPath( - aa, + for (buffer_modes) |buffer_mode| { + const result = try suite.renderCaseWithBufferMode( + allocator, io, - gold_dir, - 0, - frame_idx, - 0, - false, + render_case, + null, + buffer_mode, ); + defer { + allocator.free(result.slice); + var result_mut = result; + result_mut.deinit(allocator); + } - common.compareNDArrayToGold( - allocator, - io, - &result, - 0, - frame_idx, - 0, - 1, - gold_path, - tcfg.REL_TOL, - tcfg.ABS_TOL, - ) catch |err| { - if (first_err == null) { - first_err = err; - } - const fail_dir_name = try std.fmt.allocPrint( + const frames_num = if (result.dims.len == 5) + result.dims[1] + else + result.dims[0]; + var first_err: ?anyerror = null; + for (0..frames_num) |frame_idx| { + const gold_path = try common.findGoldPath( aa, - "psf_{s}", - .{case_dir_name}, + io, + gold_dir, + 0, + frame_idx, + 0, + false, ); - try common.saveComparisonArtifactsFromResult( - aa, + + common.compareNDArrayToGold( + allocator, io, - common.default_fails_root, - fail_dir_name, &result, 0, frame_idx, 0, - gold_path, 1, - ); - }; + gold_path, + tcfg.REL_TOL, + tcfg.ABS_TOL, + ) catch |err| { + if (first_err == null) { + first_err = err; + } + const fail_dir_name = try std.fmt.allocPrint( + aa, + "psf_{s}_{s}", + .{ case_dir_name, @tagName(buffer_mode) }, + ); + try common.saveComparisonArtifactsFromResult( + aa, + io, + common.default_fails_root, + fail_dir_name, + &result, + 0, + frame_idx, + 0, + gold_path, + 1, + ); + }; + } + if (first_err) |err| return err; } - if (first_err) |err| return err; } } } @@ -170,6 +187,66 @@ test "PSF isotropic gaussian separable and non-separable agree" { ); } +test "PSF global buffer modes match tile-local output" { + const allocator = std.testing.allocator; + const io = std.testing.io; + const render_case = suite.RenderCase{ + .distortion_case_name = "distort_shear", + .mesh_type = .quad8, + .shader_case = suite.shader_cases[0], + .psf_case = suite.psf_cases[1], + }; + const tile_local = try suite.renderCaseWithBufferMode( + allocator, + io, + render_case, + suite.tile_size_small, + .tile_local, + ); + defer { + allocator.free(tile_local.slice); + var tile_local_mut = tile_local; + tile_local_mut.deinit(allocator); + } + const global_full = try suite.renderCaseWithBufferMode( + allocator, + io, + render_case, + suite.tile_size_small, + .global_subpx_full, + ); + defer { + allocator.free(global_full.slice); + var global_full_mut = global_full; + global_full_mut.deinit(allocator); + } + const global_stripe = try suite.renderCaseWithBufferMode( + allocator, + io, + render_case, + suite.tile_size_small, + .global_subpx_stripe, + ); + defer { + allocator.free(global_stripe.slice); + var global_stripe_mut = global_stripe; + global_stripe_mut.deinit(allocator); + } + + try suite.expectResultsApproxEq( + &tile_local, + &global_full, + PSF_REL_TOL, + PSF_ABS_TOL, + ); + try suite.expectResultsApproxEq( + &tile_local, + &global_stripe, + PSF_REL_TOL, + PSF_ABS_TOL, + ); +} + test "PSF gaussian checker render is invariant to tile size" { const allocator = std.testing.allocator; const io = std.testing.io; From 7bffe7a6ff21f00e8ec6f83ccb018e4305045d73 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Mon, 3 Aug 2026 21:53:15 +0100 Subject: [PATCH 02/38] Fixed bug in global stripe mode --- src/dev_support/psfsuite.zig | 2 +- src/dev_support/ssaasuite.zig | 2 +- src/dev_support/testconfig.zig | 8 +- src/dev_support/tests.zig | 9 + src/gen_gold_min.zig | 2 +- src/gengold/gen_gold_edge.zig | 2 +- src/gengold/gen_gold_hull.zig | 2 +- src/gengold/gen_gold_multicamera.zig | 2 +- src/gengold/gen_gold_multimesh.zig | 2 +- src/gengold/gen_gold_simple.zig | 2 +- src/gengold/gen_gold_small.zig | 2 +- src/gengold/gen_gold_texfunc.zig | 2 +- src/riley/zig/riley.zig | 5 +- src/test_bench.zig | 2 +- src/test_min.zig | 399 ++++++++++++++------------- src/test_sin_approx.zig | 2 +- src/tests/test_gold_psf.zig | 253 ++++++++++++----- src/tests/test_gold_sphere.zig | 2 +- src/tests/test_visibility.zig | 2 +- 19 files changed, 416 insertions(+), 286 deletions(-) diff --git a/src/dev_support/psfsuite.zig b/src/dev_support/psfsuite.zig index d2afcc0c..d9e32145 100644 --- a/src/dev_support/psfsuite.zig +++ b/src/dev_support/psfsuite.zig @@ -191,7 +191,7 @@ fn baseRasterConfig( image_save_opts: []const iio.ImageSaveOpts, background_value: F, ) rastcfg.RasterConfig { - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.testing); config.save_strategy = save_strategy; config.tile_size_override = tile_size_override; config.background_value = background_value; diff --git a/src/dev_support/ssaasuite.zig b/src/dev_support/ssaasuite.zig index bc38af8f..0dd48479 100644 --- a/src/dev_support/ssaasuite.zig +++ b/src/dev_support/ssaasuite.zig @@ -201,7 +201,7 @@ pub fn renderCase( camera_input.sub_sample = ssaa; camera_input.distortion = getDistortionModel(distortion_case); - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.testing); config.save_strategy = .memory; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .csv, .bits = null, .scaling = .none }, diff --git a/src/dev_support/testconfig.zig b/src/dev_support/testconfig.zig index 4394c0a7..dbfdcdfc 100644 --- a/src/dev_support/testconfig.zig +++ b/src/dev_support/testconfig.zig @@ -17,16 +17,16 @@ pub const ABS_TOL: F = if (F == f32) 1.0e-3 else 1e-6; pub const RENDER_MODE: RenderMode = .in_order; pub const HULL_MODE: HullMode = .on_no_fallback; // Includes the caller thread. TOTAL_THREADS = 2 means caller + 1 helper. -pub const TOTAL_THREADS: u16 = 1; +pub const TOTAL_THREADS: u16 = 4; pub const FRAME_BATCH_SIZE_PER_GROUP: u16 = 1; pub const MAX_GEOM_JOBS_IN_FLIGHT_PER_GROUP: u16 = 1; pub const MAX_GEOM_WORKERS_PER_JOB: u16 = 1; -pub const MAX_RASTER_WORKERS_PER_JOB: u16 = 1; +pub const MAX_RASTER_WORKERS_PER_JOB: u16 = 4; pub const GEOM_SCHEDULING_MODE: rastcfg.GeometrySchedulingMode = .auto; pub const TEST_CASE_VERBOSE: bool = false; pub const RasterConfigMode = enum { - gold, + gold_gen, preview, testing, bench, @@ -44,7 +44,7 @@ pub fn getRasterConfig(mode: RasterConfigMode) rastcfg.RasterConfig { }; switch (mode) { - .gold, .preview => { + .gold_gen, .preview => { config.total_threads = 1; config.max_geom_workers_per_job = 1; config.max_raster_workers_per_job = 1; diff --git a/src/dev_support/tests.zig b/src/dev_support/tests.zig index d9e3fffa..1c66df7c 100644 --- a/src/dev_support/tests.zig +++ b/src/dev_support/tests.zig @@ -1039,6 +1039,7 @@ pub fn runMultimeshTest( .{ 1200, 800 }, rel_tol, abs_tol, + .tile_local, ); } @@ -1050,6 +1051,7 @@ pub fn runMultimeshTestExt( pixel_num: [2]u32, rel_tol: F, abs_tol: F, + buffer_mode: rastcfg.BufferMode, ) !void { var arena = std.heap.ArenaAllocator.init(outer_alloc); defer arena.deinit(); @@ -1076,6 +1078,7 @@ pub fn runMultimeshTestExt( defer camera.deinit(aa); var config = tcfg.getRasterConfig(.testing); + config.buffer_mode = buffer_mode; config.save_strategy = .memory; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .csv, .bits = null, .scaling = .none }, @@ -1185,6 +1188,7 @@ pub fn runMultimeshMixedTest( .{ 1600, 800 }, rel_tol, abs_tol, + .tile_local, ); } @@ -1196,6 +1200,7 @@ pub fn runMultimeshMixedTestExt( pixel_num: [2]u32, rel_tol: F, abs_tol: F, + buffer_mode: rastcfg.BufferMode, ) !void { var arena = std.heap.ArenaAllocator.init(outer_alloc); defer arena.deinit(); @@ -1227,6 +1232,7 @@ pub fn runMultimeshMixedTestExt( defer camera.deinit(aa); var config = tcfg.getRasterConfig(.testing); + config.buffer_mode = buffer_mode; config.save_strategy = .memory; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .csv, .bits = null, .scaling = .none }, @@ -1314,6 +1320,7 @@ pub fn runMultimeshMixedRGBTest( .{ 1200, 800 }, rel_tol, abs_tol, + .tile_local, ); } @@ -1325,6 +1332,7 @@ pub fn runMultimeshMixedRGBTestExt( pixel_num: [2]u32, rel_tol: F, abs_tol: F, + buffer_mode: rastcfg.BufferMode, ) !void { var arena = std.heap.ArenaAllocator.init(outer_alloc); defer arena.deinit(); @@ -1356,6 +1364,7 @@ pub fn runMultimeshMixedRGBTestExt( defer camera.deinit(aa); var config_rgb = tcfg.getRasterConfig(.testing); + config_rgb.buffer_mode = buffer_mode; config_rgb.save_strategy = .memory; config_rgb.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .csv, .bits = null, .scaling = .none, .channels = 3 }, diff --git a/src/gen_gold_min.zig b/src/gen_gold_min.zig index 0727d04b..15ba811d 100644 --- a/src/gen_gold_min.zig +++ b/src/gen_gold_min.zig @@ -86,7 +86,7 @@ pub fn main(init: std.process.Init) !void { .{ .sample = .quintic_bspline, .mode = .lut_lerp }, }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/gengold/gen_gold_edge.zig b/src/gengold/gen_gold_edge.zig index e964b751..fb10eb14 100644 --- a/src/gengold/gen_gold_edge.zig +++ b/src/gengold/gen_gold_edge.zig @@ -51,7 +51,7 @@ pub fn main(init: std.process.Init) !void { const pixel_num = [_]u32{ 320, 200 }; const pixel_num_distort_midside = [_]u32{ 800, 500 }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/gengold/gen_gold_hull.zig b/src/gengold/gen_gold_hull.zig index 61cabdfc..97ab66ff 100644 --- a/src/gengold/gen_gold_hull.zig +++ b/src/gengold/gen_gold_hull.zig @@ -29,7 +29,7 @@ pub fn main(init: std.process.Init) !void { }; const midside_mesh_types = [_]gk.MeshType{ .tri6, .quad8, .quad9 }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/gengold/gen_gold_multicamera.zig b/src/gengold/gen_gold_multicamera.zig index 4d9464bf..edb2a4c0 100644 --- a/src/gengold/gen_gold_multicamera.zig +++ b/src/gengold/gen_gold_multicamera.zig @@ -181,7 +181,7 @@ pub fn main(init: std.process.Init) !void { }, }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ diff --git a/src/gengold/gen_gold_multimesh.zig b/src/gengold/gen_gold_multimesh.zig index 8b766b90..59c1cd89 100644 --- a/src/gengold/gen_gold_multimesh.zig +++ b/src/gengold/gen_gold_multimesh.zig @@ -18,7 +18,7 @@ pub fn main(init: std.process.Init) !void { defer arena.deinit(); const aa = arena.allocator(); - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/gengold/gen_gold_simple.zig b/src/gengold/gen_gold_simple.zig index e5ab4dac..f8248d3a 100644 --- a/src/gengold/gen_gold_simple.zig +++ b/src/gengold/gen_gold_simple.zig @@ -50,7 +50,7 @@ pub fn main(init: std.process.Init) !void { .{ .sample = .quintic_bspline, .mode = .lut_lerp }, }; const pixel_num = [_]u32{ 640, 400 }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/gengold/gen_gold_small.zig b/src/gengold/gen_gold_small.zig index 1c83e6e0..c9c6627a 100644 --- a/src/gengold/gen_gold_small.zig +++ b/src/gengold/gen_gold_small.zig @@ -58,7 +58,7 @@ pub fn main(init: std.process.Init) !void { .{ .sample = .quintic_bspline, .mode = .lut_lerp }, }; const pixel_num = [_]u32{ 160, 100 }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/gengold/gen_gold_texfunc.zig b/src/gengold/gen_gold_texfunc.zig index 3e3922e1..2b1da32e 100644 --- a/src/gengold/gen_gold_texfunc.zig +++ b/src/gengold/gen_gold_texfunc.zig @@ -145,7 +145,7 @@ pub fn mainWithOutputRoot( .lambertian_normal_z, }; const coord_modes = [_]CoordMode{ .uv, .param }; - var config = tcfg.getRasterConfig(.gold); + var config = tcfg.getRasterConfig(.gold_gen); config.save_strategy = .disk; config.image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .fimg, .bits = null, .scaling = .none }, diff --git a/src/riley/zig/riley.zig b/src/riley/zig/riley.zig index 4ca4b3f1..7d80d919 100644 --- a/src/riley/zig/riley.zig +++ b/src/riley/zig/riley.zig @@ -1624,10 +1624,7 @@ fn rasterFrame( const requested_stripe_subpx = input.config.global_subpx_stripe_size_override orelse input.config.global_subpx_stripe_size_min; - const stripe_subpx: usize = @divExact( - @as(usize, requested_stripe_subpx), - sub_samp, - ); + const stripe_subpx: usize = requested_stripe_subpx; const first_core_suby_max = @min(image_h_subpx, stripe_subpx); var stripe = try subpxframe.SubpxStripe.init( outer_alloc, diff --git a/src/test_bench.zig b/src/test_bench.zig index 6b508c2b..61f3b817 100644 --- a/src/test_bench.zig +++ b/src/test_bench.zig @@ -180,7 +180,7 @@ test "Unified Benchmark Tests" { config; if (common.shouldRun(run_config, mt, st, sc, data_dir)) { - var r_config = tcfg.getRasterConfig(.bench); + var r_config = tcfg.getRasterConfig(.testing); // Bench tests compare the returned in-memory image directly // against gold, so avoid the disk-save path here. r_config.save_strategy = .memory; diff --git a/src/test_min.zig b/src/test_min.zig index cae66375..d60f1216 100644 --- a/src/test_min.zig +++ b/src/test_min.zig @@ -18,6 +18,7 @@ const gk = @import("riley/zig/geometrykernels.zig"); const iio = @import("riley/zig/imageio.zig"); const texops = @import("riley/zig/textureops.zig"); const Rotation = @import("riley/zig/rotation.zig").Rotation; +const BufferMode = @import("riley/zig/rasterconfig.zig").BufferMode; const simd_on = buildconfig.config.simd == .on; @@ -84,232 +85,249 @@ test "MIN Suite: sphere200 and multimesh" { .{ .sample = .quintic_bspline, .mode = .direct }, .{ .sample = .quintic_bspline, .mode = .lut_lerp }, }; + const buffer_modes = [_]BufferMode{ + .tile_local, + .global_subpx_full, + .global_subpx_stripe, + }; var total_fails: usize = 0; if (simd_on) { - std.debug.print("\nRunning MIN Suite sphere200/base tests...\n", .{}); - for (mesh_types) |mt| { - for (shader_types) |st| { - for (samp_cfgs) |sc| { - const folder_name = policy.meshName( - .benchmark_data, - mt, - ); - const data_dir = try std.fmt.allocPrint( - allocator, - "data/min/{s}_sphere200", - .{folder_name}, - ); - defer allocator.free(data_dir); - - const is_rgb = (st == .tex8_rgb or st == .nodal_rgb); - const is_allowed_rgb = (st == .nodal_rgb) or - (st == .tex8_rgb and - sc.sample == .cubic_catmull_rom and - sc.mode == .lut_lerp); - - if (is_rgb and !is_allowed_rgb) continue; - - if (common.shouldRun( - .{ .run = .all, .skip_quad4ibi_sphere = true }, - mt, - st, - sc, - data_dir, - )) { - var r_config = tcfg.getRasterConfig(.bench); - r_config.save_strategy = .memory; - r_config.image_save_opts = &[_]iio.ImageSaveOpts{}; - - const case_name = try minsuite.calcMinCaseName( - allocator, + for (buffer_modes) |buffer_mode| { + std.debug.print( + "\nRunning MIN Suite sphere200/base tests ({s})...\n", + .{@tagName(buffer_mode)}, + ); + for (mesh_types) |mt| { + for (shader_types) |st| { + for (samp_cfgs) |sc| { + const folder_name = policy.meshName( + .benchmark_data, mt, - st, - sc, ); - defer allocator.free(case_name); - var result = try common.runBenchmarkQuiet( - u8, + const data_dir = try std.fmt.allocPrint( allocator, - io, + "data/min/{s}_sphere200", + .{folder_name}, + ); + defer allocator.free(data_dir); + + const is_rgb = (st == .tex8_rgb or st == .nodal_rgb); + const is_allowed_rgb = (st == .nodal_rgb) or + (st == .tex8_rgb and + sc.sample == .cubic_catmull_rom and + sc.mode == .lut_lerp); + + if (is_rgb and !is_allowed_rgb) continue; + + if (common.shouldRun( + .{ .run = .all, .skip_quad4ibi_sphere = true }, mt, st, sc, - null, data_dir, - render_defaults_sphere, - texture_grey, - texture_rgb, - r_config, - "", - ); - defer result.deinit(allocator); + )) { + var r_config = tcfg.getRasterConfig(.testing); + r_config.buffer_mode = buffer_mode; + r_config.save_strategy = .memory; + r_config.image_save_opts = &[_]iio.ImageSaveOpts{}; - const gold_case_dir = try std.fs.path.join( - allocator, - &[_][]const u8{ - gold_dir, - "sphere200", - "base", - case_name, - }, - ); - defer allocator.free(gold_case_dir); - const gold_fname = try tests.findGoldPath( - allocator, - io, - gold_case_dir, - 0, - 0, - 0, - is_rgb, - ); - defer allocator.free(gold_fname); + const case_name = try minsuite.calcMinCaseName( + allocator, + mt, + st, + sc, + ); + defer allocator.free(case_name); + var result = try common.runBenchmarkQuiet( + u8, + allocator, + io, + mt, + st, + sc, + null, + data_dir, + render_defaults_sphere, + texture_grey, + texture_rgb, + r_config, + "", + ); + defer result.deinit(allocator); - const channels: usize = if (is_rgb) 3 else 1; - tests.compareNDArrayToGold( - allocator, - io, - &result.image.?, - 0, - 0, - 0, - channels, - gold_fname, - tcfg.REL_TOL, - tcfg.ABS_TOL, - ) catch |err| { - try tests.saveComparisonArtifactsFromResult( + const gold_case_dir = try std.fs.path.join( + allocator, + &[_][]const u8{ + gold_dir, + "sphere200", + "base", + case_name, + }, + ); + defer allocator.free(gold_case_dir); + const gold_fname = try tests.findGoldPath( + allocator, + io, + gold_case_dir, + 0, + 0, + 0, + is_rgb, + ); + defer allocator.free(gold_fname); + + const channels: usize = if (is_rgb) 3 else 1; + tests.compareNDArrayToGold( allocator, io, - "fails", - case_name, &result.image.?, 0, 0, 0, - gold_fname, channels, - ); - if (err == error.PixelMismatch) { - total_fails += 1; - continue; - } - return err; - }; + gold_fname, + tcfg.REL_TOL, + tcfg.ABS_TOL, + ) catch |err| { + try tests.saveComparisonArtifactsFromResult( + allocator, + io, + "fails", + case_name, + &result.image.?, + 0, + 0, + 0, + gold_fname, + channels, + ); + if (err == error.PixelMismatch) { + total_fails += 1; + continue; + } + return err; + }; + } } } } } - std.debug.print("Running MIN Suite sphere200multicull tests...\n", .{}); - for (mesh_types) |mt| { - for (shader_types) |st| { - for (samp_cfgs) |sc| { - const folder_name = policy.meshName( - .benchmark_data, - mt, - ); - const data_dir = try std.fmt.allocPrint( - allocator, - "data/min/{s}_sphere200", - .{folder_name}, - ); - defer allocator.free(data_dir); - - const is_rgb = (st == .tex8_rgb or st == .nodal_rgb); - const is_allowed_rgb = (st == .nodal_rgb) or - (st == .tex8_rgb and - sc.sample == .cubic_catmull_rom and - sc.mode == .lut_lerp); - - if (is_rgb and !is_allowed_rgb) continue; - - if (common.shouldRun( - .{ .run = .all, .skip_quad4ibi_sphere = true }, - mt, - st, - sc, - data_dir, - )) { - var r_config = tcfg.getRasterConfig(.bench); - r_config.save_strategy = .memory; - r_config.image_save_opts = &[_]iio.ImageSaveOpts{}; - - const case_name = try minsuite.calcMinCaseName( - allocator, + for (buffer_modes) |buffer_mode| { + std.debug.print( + "Running MIN Suite sphere200multicull tests ({s})...\n", + .{@tagName(buffer_mode)}, + ); + for (mesh_types) |mt| { + for (shader_types) |st| { + for (samp_cfgs) |sc| { + const folder_name = policy.meshName( + .benchmark_data, mt, - st, - sc, ); - defer allocator.free(case_name); - var result = try minsuite.runSphere200MultiCullQuiet( + const data_dir = try std.fmt.allocPrint( allocator, - io, + "data/min/{s}_sphere200", + .{folder_name}, + ); + defer allocator.free(data_dir); + + const is_rgb = (st == .tex8_rgb or st == .nodal_rgb); + const is_allowed_rgb = (st == .nodal_rgb) or + (st == .tex8_rgb and + sc.sample == .cubic_catmull_rom and + sc.mode == .lut_lerp); + + if (is_rgb and !is_allowed_rgb) continue; + + if (common.shouldRun( + .{ .run = .all, .skip_quad4ibi_sphere = true }, mt, st, sc, data_dir, - pixel_num_sphere, - texture_grey, - texture_rgb, - r_config, - "", - 0.75, - ); - defer result.deinit(allocator); + )) { + var r_config = tcfg.getRasterConfig(.testing); + r_config.buffer_mode = buffer_mode; + r_config.save_strategy = .memory; + r_config.image_save_opts = &[_]iio.ImageSaveOpts{}; - const gold_case_dir = try std.fs.path.join( - allocator, - &[_][]const u8{ - gold_dir, - "sphere200multicull", - case_name, - }, - ); - defer allocator.free(gold_case_dir); - const gold_fname = try tests.findGoldPath( - allocator, - io, - gold_case_dir, - 0, - 0, - 0, - is_rgb, - ); - defer allocator.free(gold_fname); + const case_name = try minsuite.calcMinCaseName( + allocator, + mt, + st, + sc, + ); + defer allocator.free(case_name); + var result = try minsuite.runSphere200MultiCullQuiet( + allocator, + io, + mt, + st, + sc, + data_dir, + pixel_num_sphere, + texture_grey, + texture_rgb, + r_config, + "", + 0.75, + ); + defer result.deinit(allocator); - const channels: usize = if (is_rgb) 3 else 1; - tests.compareNDArrayToGold( - allocator, - io, - &result.image.?, - 0, - 0, - 0, - channels, - gold_fname, - tcfg.REL_TOL, - tcfg.ABS_TOL, - ) catch |err| { - try tests.saveComparisonArtifactsFromResult( + const gold_case_dir = try std.fs.path.join( + allocator, + &[_][]const u8{ + gold_dir, + "sphere200multicull", + case_name, + }, + ); + defer allocator.free(gold_case_dir); + const gold_fname = try tests.findGoldPath( + allocator, + io, + gold_case_dir, + 0, + 0, + 0, + is_rgb, + ); + defer allocator.free(gold_fname); + + const channels: usize = if (is_rgb) 3 else 1; + tests.compareNDArrayToGold( allocator, io, - "fails", - case_name, &result.image.?, 0, 0, 0, - gold_fname, channels, - ); - if (err == error.PixelMismatch) { - total_fails += 1; - continue; - } - return err; - }; + gold_fname, + tcfg.REL_TOL, + tcfg.ABS_TOL, + ) catch |err| { + try tests.saveComparisonArtifactsFromResult( + allocator, + io, + "fails", + case_name, + &result.image.?, + 0, + 0, + 0, + gold_fname, + channels, + ); + if (err == error.PixelMismatch) { + total_fails += 1; + continue; + } + return err; + }; + } } } } @@ -330,7 +348,7 @@ test "MIN Suite: sphere200 and multimesh" { "data/min/quad9_twoelems/", }; - { + for (buffer_modes) |buffer_mode| { tests.runMultimeshTestExt( allocator, io, @@ -339,6 +357,7 @@ test "MIN Suite: sphere200 and multimesh" { pixel_num_multi, tcfg.REL_TOL, tcfg.ABS_TOL, + buffer_mode, ) catch |err| { total_fails += 1; if (err != error.PixelMismatch) { @@ -347,7 +366,7 @@ test "MIN Suite: sphere200 and multimesh" { }; } - { + for (buffer_modes) |buffer_mode| { tests.runMultimeshMixedTestExt( allocator, io, @@ -356,6 +375,7 @@ test "MIN Suite: sphere200 and multimesh" { pixel_num_multi, tcfg.REL_TOL, tcfg.ABS_TOL, + buffer_mode, ) catch |err| { total_fails += 1; if (err != error.PixelMismatch) { @@ -364,7 +384,7 @@ test "MIN Suite: sphere200 and multimesh" { }; } - { + for (buffer_modes) |buffer_mode| { tests.runMultimeshMixedRGBTestExt( allocator, io, @@ -373,6 +393,7 @@ test "MIN Suite: sphere200 and multimesh" { pixel_num_multi, tcfg.REL_TOL, tcfg.ABS_TOL, + buffer_mode, ) catch |err| { total_fails += 1; if (err != error.PixelMismatch) { diff --git a/src/test_sin_approx.zig b/src/test_sin_approx.zig index 054ba2ee..afefa023 100644 --- a/src/test_sin_approx.zig +++ b/src/test_sin_approx.zig @@ -153,7 +153,7 @@ fn renderSinImage( .distortion = camera.distortion, }; - var config = tcfg.getRasterConfig(.bench); + var config = tcfg.getRasterConfig(.testing); config.save_strategy = .memory; config.image_save_opts = &[_]iio.ImageSaveOpts{}; diff --git a/src/tests/test_gold_psf.zig b/src/tests/test_gold_psf.zig index a2ce625e..396bd65c 100644 --- a/src/tests/test_gold_psf.zig +++ b/src/tests/test_gold_psf.zig @@ -35,11 +35,8 @@ test "Gold PSF Suite" { std.debug.print("Running Gold PSF Tests...\n", .{}); const suite_start = Timestamp.now(io, .awake); - const buffer_modes = [_]riley.BufferMode{ - .tile_local, - .global_subpx_full, - .global_subpx_stripe, - }; + const tile_local_start = Timestamp.now(io, .awake); + var tile_local_cases: usize = 0; for (suite.distortion_cases) |distortion_case| { for (distortion_case.mesh_types) |mesh_type| { for (suite.shader_cases) |shader_case| { @@ -51,82 +48,98 @@ test "Gold PSF Suite" { .shader_case = shader_case, .psf_case = psf_case, }; - const case_dir_name = try suite.caseDirName(aa, render_case); - const gold_dir = try std.fmt.allocPrint( + try testCaseAgainstGold( + allocator, + io, aa, - "{s}/{s}", - .{ suite.gold_root, case_dir_name }, + render_case, + .tile_local, ); - for (buffer_modes) |buffer_mode| { - const result = try suite.renderCaseWithBufferMode( - allocator, - io, - render_case, - null, - buffer_mode, - ); - defer { - allocator.free(result.slice); - var result_mut = result; - result_mut.deinit(allocator); - } - - const frames_num = if (result.dims.len == 5) - result.dims[1] - else - result.dims[0]; - var first_err: ?anyerror = null; - for (0..frames_num) |frame_idx| { - const gold_path = try common.findGoldPath( - aa, - io, - gold_dir, - 0, - frame_idx, - 0, - false, - ); - - common.compareNDArrayToGold( - allocator, - io, - &result, - 0, - frame_idx, - 0, - 1, - gold_path, - tcfg.REL_TOL, - tcfg.ABS_TOL, - ) catch |err| { - if (first_err == null) { - first_err = err; - } - const fail_dir_name = try std.fmt.allocPrint( - aa, - "psf_{s}_{s}", - .{ case_dir_name, @tagName(buffer_mode) }, - ); - try common.saveComparisonArtifactsFromResult( - aa, - io, - common.default_fails_root, - fail_dir_name, - &result, - 0, - frame_idx, - 0, - gold_path, - 1, - ); - }; - } - if (first_err) |err| return err; - } + tile_local_cases += 1; } } } } + printModeComplete( + io, + "tile_local", + tile_local_cases, + tile_local_start, + ); + + const global_cases = [_]suite.RenderCase{ + .{ + .distortion_case_name = "distort_bulge", + .mesh_type = .tri6, + .shader_case = suite.shader_cases[0], + .psf_case = suite.psf_cases[0], + }, + .{ + .distortion_case_name = "distort_bulge", + .mesh_type = .tri6, + .shader_case = suite.shader_cases[0], + .psf_case = suite.psf_cases[1], + }, + .{ + .distortion_case_name = "distort_bulge", + .mesh_type = .tri6, + .shader_case = suite.shader_cases[0], + .psf_case = suite.psf_cases[2], + }, + .{ + .distortion_case_name = "distort_bulge", + .mesh_type = .tri6, + .shader_case = suite.shader_cases[0], + .psf_case = suite.psf_cases[3], + }, + .{ + .distortion_case_name = "distort_shear", + .mesh_type = .quad8, + .shader_case = suite.shader_cases[1], + .psf_case = suite.psf_cases[0], + }, + .{ + .distortion_case_name = "distort_shear", + .mesh_type = .quad8, + .shader_case = suite.shader_cases[1], + .psf_case = suite.psf_cases[1], + }, + .{ + .distortion_case_name = "distort_shear", + .mesh_type = .quad8, + .shader_case = suite.shader_cases[1], + .psf_case = suite.psf_cases[2], + }, + .{ + .distortion_case_name = "distort_shear", + .mesh_type = .quad8, + .shader_case = suite.shader_cases[1], + .psf_case = suite.psf_cases[3], + }, + }; + const global_modes = [_]riley.BufferMode{ + .global_subpx_full, + .global_subpx_stripe, + }; + for (global_modes) |buffer_mode| { + _ = arena.reset(.retain_capacity); + const mode_start = Timestamp.now(io, .awake); + for (global_cases) |render_case| { + try testCaseAgainstGold( + allocator, + io, + aa, + render_case, + buffer_mode, + ); + } + printModeComplete( + io, + @tagName(buffer_mode), + global_cases.len, + mode_start, + ); + } const suite_end = Timestamp.now(io, .awake); const suite_ms = @as( @@ -136,6 +149,96 @@ test "Gold PSF Suite" { std.debug.print("Gold PSF Test Suite took {d:.3} ms\n", .{suite_ms}); } +fn testCaseAgainstGold( + outer_alloc: std.mem.Allocator, + io: std.Io, + alloc: std.mem.Allocator, + render_case: suite.RenderCase, + buffer_mode: riley.BufferMode, +) !void { + const case_dir_name = try suite.caseDirName(alloc, render_case); + const gold_dir = try std.fmt.allocPrint( + alloc, + "{s}/{s}", + .{ suite.gold_root, case_dir_name }, + ); + const result = try suite.renderCaseWithBufferMode( + outer_alloc, + io, + render_case, + null, + buffer_mode, + ); + defer { + outer_alloc.free(result.slice); + var result_mut = result; + result_mut.deinit(outer_alloc); + } + + const frames_num = if (result.dims.len == 5) result.dims[1] else result.dims[0]; + var first_err: ?anyerror = null; + for (0..frames_num) |frame_idx| { + const gold_path = try common.findGoldPath( + alloc, + io, + gold_dir, + 0, + frame_idx, + 0, + false, + ); + common.compareNDArrayToGold( + outer_alloc, + io, + &result, + 0, + frame_idx, + 0, + 1, + gold_path, + tcfg.REL_TOL, + tcfg.ABS_TOL, + ) catch |err| { + if (first_err == null) first_err = err; + const fail_dir_name = try std.fmt.allocPrint( + alloc, + "psf_{s}_{s}", + .{ case_dir_name, @tagName(buffer_mode) }, + ); + try common.saveComparisonArtifactsFromResult( + alloc, + io, + common.default_fails_root, + fail_dir_name, + &result, + 0, + frame_idx, + 0, + gold_path, + 1, + ); + }; + } + if (first_err) |err| return err; +} + +fn printModeComplete( + io: std.Io, + mode_name: []const u8, + cases_num: usize, + time_start: Timestamp, +) void { + const time_end = Timestamp.now(io, .awake); + const elapsed_ms = @as( + F, + @floatFromInt(time_start.durationTo(time_end).raw.nanoseconds), + ) / 1e6; + std.debug.print( + "PSF {s} complete: {d} cases ({d:.3} ms)\n", + .{ mode_name, cases_num, elapsed_ms }, + ); +} + test "PSF isotropic gaussian separable and non-separable agree" { const allocator = std.testing.allocator; const io = std.testing.io; diff --git a/src/tests/test_gold_sphere.zig b/src/tests/test_gold_sphere.zig index f9d231a8..075905ed 100644 --- a/src/tests/test_gold_sphere.zig +++ b/src/tests/test_gold_sphere.zig @@ -146,7 +146,7 @@ test "Sphere Gold Tests" { defer allocator.free(gold_case_name); // 1. Run benchmark - var r_config = tcfg.getRasterConfig(.bench); + var r_config = tcfg.getRasterConfig(.testing); r_config.save_strategy = if (c.out.len > 0) .both else .memory; const test_dir_case = try std.fs.path.join( diff --git a/src/tests/test_visibility.zig b/src/tests/test_visibility.zig index 781eeab3..6e1d5764 100644 --- a/src/tests/test_visibility.zig +++ b/src/tests/test_visibility.zig @@ -35,7 +35,7 @@ test "MIN multi-cull render is unchanged by a halo-only bypass" { ); defer texture_rgb.deinit(allocator); - var config_base = tcfg.getRasterConfig(.bench); + var config_base = tcfg.getRasterConfig(.testing); config_base.save_strategy = .memory; config_base.image_save_opts = &[_]iio.ImageSaveOpts{}; var config_halo = config_base; From 729b6443b71c9186e9b94333dfde41a8eeff3500 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Tue, 4 Aug 2026 07:00:47 +0100 Subject: [PATCH 03/38] Fixed depth buffer threading bug in global path --- src/riley/zig/rasterengine_common.zig | 10 ++++--- src/riley/zig/riley.zig | 41 +++++++++++++++++---------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/riley/zig/rasterengine_common.zig b/src/riley/zig/rasterengine_common.zig index c9b5ab7e..741b195b 100644 --- a/src/riley/zig/rasterengine_common.zig +++ b/src/riley/zig/rasterengine_common.zig @@ -433,10 +433,12 @@ pub fn rasterSceneGlobalComm( } }; - const workers_num = scalingpolicy.rasterWorkers( - requested_workers, - tiling.active_tiles.len, - ); + // Global sub-pixel targets are shared directly by every tile. Unlike the + // tile-local backend, their depth state is not merged after rasterisation, + // so concurrent tiles can race when their raster domains intersect. Keep + // this pass ordered until global depth ownership/merging is introduced. + _ = requested_workers; + const workers_num: usize = 1; var chunk_exec = pce.ParaChunkExecutor.init(io, @intCast(workers_num)); var arena = std.heap.ArenaAllocator.init(outer_alloc); defer arena.deinit(); diff --git a/src/riley/zig/riley.zig b/src/riley/zig/riley.zig index 7d80d919..004e19e4 100644 --- a/src/riley/zig/riley.zig +++ b/src/riley/zig/riley.zig @@ -1650,20 +1650,29 @@ fn rasterFrame( halo_subpx, input.config.background_value, ); - const stripe_tiling = try sceneGlobalTileElemOverlap( - outer_alloc, - ctx.actual_tile_size, - @intCast(input.camera.pixels_num[0]), - @intCast(input.camera.pixels_num[1]), - @intCast(core_suby_min / sub_samp), - @intCast(core_suby_max / sub_samp), - halo_px, - ctx.elems_in_image_by_mesh, - ctx.elem_bboxes_by_mesh, - ); + var stripe_tiling: rops.TilingOverlaps = undefined; + var stripe_tiling_owned = false; + if (core_suby_min == 0 and core_suby_max == image_h_subpx) { + stripe_tiling = ctx.tiling.?; + } else { + stripe_tiling = try sceneGlobalTileElemOverlap( + outer_alloc, + ctx.actual_tile_size, + @intCast(input.camera.pixels_num[0]), + @intCast(input.camera.pixels_num[1]), + @intCast(core_suby_min / sub_samp), + @intCast(core_suby_max / sub_samp), + halo_px, + ctx.elems_in_image_by_mesh, + ctx.elem_bboxes_by_mesh, + ); + stripe_tiling_owned = true; + } errdefer { - outer_alloc.free(stripe_tiling.active_tiles); - outer_alloc.free(stripe_tiling.overlaps); + if (stripe_tiling_owned) { + outer_alloc.free(stripe_tiling.active_tiles); + outer_alloc.free(stripe_tiling.overlaps); + } } try rasterengineglobal.rasterScene( @@ -1692,8 +1701,10 @@ fn rasterFrame( global_resolve_time_ns += @floatFromInt( time_start_resolve.durationTo(time_end_resolve).raw.nanoseconds, ); - outer_alloc.free(stripe_tiling.active_tiles); - outer_alloc.free(stripe_tiling.overlaps); + if (stripe_tiling_owned) { + outer_alloc.free(stripe_tiling.active_tiles); + outer_alloc.free(stripe_tiling.overlaps); + } core_suby_min = core_suby_max; } }, From f37014bc5a6a4ba7f2cc9bdbcfa0789da424d27d Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Tue, 4 Aug 2026 07:48:05 +0100 Subject: [PATCH 04/38] Updated c-abi and python abi to have buffer_mode --- README.md | 5 +- build.zig | 5 ++ dev/README.md | 1 + src/demo_psf.zig | 143 ++++++++++++++++++++++++++++++++ src/riley/__init__.py | 2 + src/riley/__main__.py | 1 + src/riley/cyth/riley.h | 1 + src/riley/cyth/riley.pxd | 1 + src/riley/cyth/riley.py | 9 ++ src/riley/pydemos/demo_psf.py | 86 +++++++++++++++++++ src/riley/pytests/test_riley.py | 6 ++ src/riley/zig/c-riley.zig | 11 +++ src/run_all_demos.zig | 2 + src/test_min.zig | 2 +- 14 files changed, 273 insertions(+), 2 deletions(-) create mode 100644 src/demo_psf.zig create mode 100644 src/riley/pydemos/demo_psf.py diff --git a/README.md b/README.md index 0cd4e48f..9bffa63e 100644 --- a/README.md +++ b/README.md @@ -95,11 +95,13 @@ or with the build system: zig build demo- -Doptimize=ReleaseFast ``` -where `CASE` is one of `sphere200`, `rabbits`, `dicuq`, or `stereocal`. Zig demo output is written to `./out/demo-CASE/`. +where `CASE` is one of `sphere200`, `psf`, `rabbits`, `dicuq`, or `stereocal`. Zig demo output is written to `./out/demo-CASE/`. +The `psf` demo writes separate `global_subpx_full` and `global_subpx_stripe` subdirectories. Zig demo source on GitHub: - [`demo_sphere200.zig`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/demo_sphere200.zig) +- [`demo_psf.zig`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/demo_psf.zig) - [`demo_rabbits.zig`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/demo_rabbits.zig) - [`demo_dicuq.zig`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/demo_dicuq.zig) - [`demo_stereocal.zig`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/demo_stereocal.zig) @@ -115,6 +117,7 @@ Python demo output is written to `Path.cwd() / "out-riley-py" / "demo-CASE"`. Python demo source on GitHub: - [`demo_sphere200.py`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/riley/pydemos/demo_sphere200.py) +- [`demo_psf.py`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/riley/pydemos/demo_psf.py) - [`demo_rabbits.py`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/riley/pydemos/demo_rabbits.py) - [`demo_dicuq.py`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/riley/pydemos/demo_dicuq.py) - [`demo_dic_from_exodus.py`](https://github.com/Computer-Aided-Validation-Laboratory/riley-raster/blob/main/src/riley/pydemos/demo_dic_from_exodus.py) diff --git a/build.zig b/build.zig index 7cc21f45..d35eecf6 100644 --- a/build.zig +++ b/build.zig @@ -95,6 +95,11 @@ pub fn build(b: *std.Build) void { .description = "Run the sphere200 demo", .source_path = "src/demo_sphere200.zig", }, + .{ + .step_name = "demo-psf", + .description = "Run the Gaussian PSF demo", + .source_path = "src/demo_psf.zig", + }, .{ .step_name = "demo-rabbits", .description = "Run the rabbits demo", diff --git a/dev/README.md b/dev/README.md index 531c42e5..63ddca40 100644 --- a/dev/README.md +++ b/dev/README.md @@ -223,6 +223,7 @@ Run a packaged Python demo directly with: ```shell python -m riley demo_sphere200 +python -m riley demo_psf python -m riley demo_rabbits python -m riley demo_dicuq python -m riley demo_dic_from_exodus diff --git a/src/demo_psf.zig b/src/demo_psf.zig new file mode 100644 index 00000000..821740b0 --- /dev/null +++ b/src/demo_psf.zig @@ -0,0 +1,143 @@ +// -------------------------------------------------------------------------- +// Riley: A High Performance Rasteriser for DIC UQ +// +// Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +// Licensed under the MIT License (see LICENSE file for details) +// +// Authors: scepticalrabbit (Lloyd Fletcher) +// -------------------------------------------------------------------------- +const std = @import("std"); + +const buildconfig = @import("riley/zig/buildconfig.zig"); +const riley = @import("riley/zig/riley.zig"); +const meshio = @import("riley/zig/meshio.zig"); +const uvio = @import("riley/zig/uvio.zig"); +const iio = @import("riley/zig/imageio.zig"); +const mo = @import("riley/zig/meshpipeline.zig"); +const camera = @import("riley/zig/camera.zig"); +const cameraops = @import("riley/zig/cameraops.zig"); +const sceneops = @import("riley/zig/sceneops.zig"); +const Rotation = @import("riley/zig/rotation.zig").Rotation; + +const F = buildconfig.F; + +pub fn main(init: std.process.Init) !void { + const outer_alloc = init.gpa; + var arena = std.heap.ArenaAllocator.init(outer_alloc); + defer arena.deinit(); + const aa = arena.allocator(); + + const config_base = riley.RasterConfig{ + .save_strategy = .disk, + .total_threads = 4, + .max_raster_workers_per_job = 4, + .image_save_opts = &[_]iio.ImageSaveOpts{ + .{ .format = .bmp, .bits = 8, .scaling = .auto }, + }, + .report = .bench, + }; + var threaded_io = riley.getThreadedIo( + aa, + init.minimal, + config_base.total_threads, + ); + defer threaded_io.deinit(); + const io = threaded_io.io(); + + const data_dir = "data/min/tri6_sphere200/"; + const out_dir_root = "./out/demo-psf"; + const pixel_num = [_]u32{ 800, 500 }; + + std.debug.print("Loading sphere simulation data from {s}...\n", .{data_dir}); + const sim_data = try meshio.loadSimData( + aa, + io, + data_dir ++ "coords.csv", + data_dir ++ "connect.csv", + null, + null, + ); + const uvs = try uvio.loadUVMap(aa, io, data_dir ++ "uvs.csv"); + const texture = try iio.loadImage( + u8, + 1, + aa, + io, + "texture/speckle.bmp", + .bmp, + ); + const mesh = mo.MeshInput{ + .mesh_type = .tri6, + .coords = sim_data.coords, + .connect = sim_data.connect, + .disp = null, + .shader = .{ .tex_u8 = .{ + .uvs = uvs.array, + .tex = texture, + .samp_cfg = .{ + .sample = .cubic_catmull_rom, + .mode = .lut_lerp, + }, + .bits = 8, + .scaling = .none, + } }, + }; + + const pixel_size = [_]F{ @floatCast(5.3e-6), @floatCast(5.3e-6) }; + const focal_length: F = @floatCast(50.0e-3); + const rotation = Rotation.init(0, 0, 0); + const roi_cent_world = sceneops.boundsCenter(&sim_data.coords); + const pos_world = cameraops.posFillFrameFromRot( + &sim_data.coords, + pixel_num, + pixel_size, + focal_length, + rotation, + 1.0, + ); + const camera_input = camera.CameraInput{ + .pixels_num = pixel_num, + .pixels_size = pixel_size, + .pos_world = pos_world, + .rot_world = rotation, + .roi_cent_world = roi_cent_world, + .focal_length = focal_length, + .sub_sample = 2, + .psf = .{ .gaussian = .{ + .sigma_px = 1.0, + .supp_rad_px = 3.0, + .separable = .yes, + } }, + }; + const render_groups = [_]riley.RenderGroupSpec{ + .{ .io = io, .workers = config_base.total_threads }, + }; + const modes = [_]riley.BufferMode{ + .global_subpx_full, + .global_subpx_stripe, + }; + + for (modes) |mode| { + var config = config_base; + config.buffer_mode = mode; + const out_dir = try std.fs.path.join( + aa, + &[_][]const u8{ out_dir_root, @tagName(mode) }, + ); + std.debug.print("Rendering PSF sphere with {s}...\n", .{@tagName(mode)}); + if (try riley.raster( + aa, + &render_groups, + &[_]camera.CameraInput{camera_input}, + &[_]mo.MeshInput{mesh}, + config, + out_dir, + )) |image| { + aa.free(image.slice); + var image_mut = image; + image_mut.deinit(aa); + } + } + + std.debug.print("Demo complete. Images saved to {s}/\n", .{out_dir_root}); +} diff --git a/src/riley/__init__.py b/src/riley/__init__.py index b9395fe3..e025b604 100644 --- a/src/riley/__init__.py +++ b/src/riley/__init__.py @@ -29,6 +29,7 @@ Camera, CameraInput, CameraCoordSys, + BufferMode, HullMode, Mesh, MeshInput, @@ -92,6 +93,7 @@ "Camera", "CameraInput", "CameraCoordSys", + "BufferMode", "ConnectCsvOrientation", "ConnectIndexing", "CoordCsvOrientation", diff --git a/src/riley/__main__.py b/src/riley/__main__.py index d83b3f1b..01ab7cad 100644 --- a/src/riley/__main__.py +++ b/src/riley/__main__.py @@ -15,6 +15,7 @@ _DEMO_FUNCS = { "demo_sphere200": "riley.pydemos.demo_sphere200", + "demo_psf": "riley.pydemos.demo_psf", "demo_rabbits": "riley.pydemos.demo_rabbits", "demo_dicuq": "riley.pydemos.demo_dicuq", "demo_dic_from_exodus": "riley.pydemos.demo_dic_from_exodus", diff --git a/src/riley/cyth/riley.h b/src/riley/cyth/riley.h index 77600fb5..02c284e4 100644 --- a/src/riley/cyth/riley.h +++ b/src/riley/cyth/riley.h @@ -258,6 +258,7 @@ typedef struct c_raster_config { uint8_t full_stats_save_earlyout_map; uint8_t full_stats_save_pixel_occupancy_map; uint8_t full_stats_save_normals_map; + uint32_t buffer_mode; } CRasterConfig; size_t rileyGetLastError(uint8_t* out_buf, size_t out_buf_len); diff --git a/src/riley/cyth/riley.pxd b/src/riley/cyth/riley.pxd index fe829807..2dd0f436 100644 --- a/src/riley/cyth/riley.pxd +++ b/src/riley/cyth/riley.pxd @@ -242,6 +242,7 @@ cdef extern from "riley.h": uint8_t full_stats_save_earlyout_map uint8_t full_stats_save_pixel_occupancy_map uint8_t full_stats_save_normals_map + uint32_t buffer_mode size_t rileyGetLastError(uint8_t* out_buf, size_t out_buf_len) diff --git a/src/riley/cyth/riley.py b/src/riley/cyth/riley.py index 385ef46d..3e0c879a 100644 --- a/src/riley/cyth/riley.py +++ b/src/riley/cyth/riley.py @@ -193,6 +193,7 @@ class RasterConfig: full_stats_save_earlyout_map: bool = True full_stats_save_pixel_occupancy_map: bool = True full_stats_save_normals_map: bool = False + buffer_mode: int = 0 class MeshType(IntEnum): @@ -250,6 +251,12 @@ class ReportMode(IntEnum): full_stats = 2 +class BufferMode(IntEnum): + tile_local = 0 + global_subpx_full = 1 + global_subpx_stripe = 2 + + class SubPixelCenterMap(IntEnum): full_in_mem = 0 per_tile = 1 @@ -541,6 +548,7 @@ def _make_raster_config(config: Any) -> cr.CRasterConfig: config_out.full_stats_save_normals_map = int( config.full_stats_save_normals_map, ) + config_out.buffer_mode = int(config.buffer_mode) return config_out @@ -1303,6 +1311,7 @@ def raster( "Camera", "CameraInput", "CameraCoordSys", + "BufferMode", "HullMode", "Mesh", "MeshInput", diff --git a/src/riley/pydemos/demo_psf.py b/src/riley/pydemos/demo_psf.py new file mode 100644 index 00000000..d7e9fd7f --- /dev/null +++ b/src/riley/pydemos/demo_psf.py @@ -0,0 +1,86 @@ +# -------------------------------------------------------------------------- +# Riley: A High Performance Rasteriser for DIC UQ +# +# Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +# Licensed under the MIT License (see LICENSE file for details) +# +# Authors: scepticalrabbit (Lloyd Fletcher) +# -------------------------------------------------------------------------- +from __future__ import annotations + +from time import perf_counter + +import riley + +from riley.pydemos.common import make_demo_out_dir + + +def main() -> None: + data_dir = riley.data.sphere200_case_path() + texture_path = riley.data.speckle_texture_path() + out_dir_root = make_demo_out_dir("demo-psf") + pixels_num = (800, 500) + pixels_size = (5.3e-6, 5.3e-6) + focal_length = 50.0e-3 + rot_world = (0.0, 0.0, 0.0) + + coords, connect, uvs, _ = riley.load_sim_csvs(data_dir) + texture = riley.load_texture(texture_path) + roi_cent_world = riley.roi_cent_from_coords(coords) + pos_world = riley.pos_fill_frame_from_rot( + coords, + pixels_num, + pixels_size, + focal_length, + rot_world, + 1.0, + ) + mesh = riley.Mesh( + mesh_type=riley.MeshType.tri6, + coords=coords, + connect=connect, + uvs=uvs, + texture=texture, + sample=riley.TextureSample.cubic_catmull_rom, + sample_mode=riley.TextureSampleMode.lut_lerp, + bits=8, + scaling_type=riley.ScaleStrategy.none, + ) + camera = riley.Camera( + pixels_num=pixels_num, + pixels_size=pixels_size, + pos_world=pos_world, + rot_world=rot_world, + roi_cent_world=roi_cent_world, + focal_length=focal_length, + sub_sample=2, + coord_sys=riley.CameraCoordSys.opengl, + psf_type=riley.PsfType.gaussian, + psf_sigma_x=1.0, + psf_support_rad=3.0, + psf_separable=1, + ) + + for mode in ( + riley.BufferMode.global_subpx_full, + riley.BufferMode.global_subpx_stripe, + ): + out_dir = out_dir_root / mode.name + out_dir.mkdir(parents=True, exist_ok=True) + config = riley.create_raster_config( + num_frames=1, + total_threads=4, + save_strategy=riley.SaveStrategy.disk, + ) + config.buffer_mode = mode + + start_time = perf_counter() + image_array = riley.raster(mesh, camera, config, out_dir=str(out_dir)) + elapsed_time = perf_counter() - start_time + print(f"{mode.name}: {elapsed_time:.6f} s") + if image_array is not None: + print(f"rendered image array with shape {image_array.shape} to {out_dir}") + + +if __name__ == "__main__": + main() diff --git a/src/riley/pytests/test_riley.py b/src/riley/pytests/test_riley.py index 11d4f399..1ee8dbc1 100644 --- a/src/riley/pytests/test_riley.py +++ b/src/riley/pytests/test_riley.py @@ -41,6 +41,12 @@ "out/demo-sphere200", "out-riley-py/demo-sphere200", ), + ( + "psf", + [str(PYTHON_EXE), "-m", "riley", "demo_psf"], + "out/demo-psf", + "out-riley-py/demo-psf", + ), ( "rabbits", [str(PYTHON_EXE), "-m", "riley", "demo_rabbits"], diff --git a/src/riley/zig/c-riley.zig b/src/riley/zig/c-riley.zig index 046e6a65..9789f0c6 100644 --- a/src/riley/zig/c-riley.zig +++ b/src/riley/zig/c-riley.zig @@ -305,6 +305,7 @@ pub const CRasterConfig = extern struct { full_stats_save_earlyout_map: u8, full_stats_save_pixel_occupancy_map: u8, full_stats_save_normals_map: u8, + buffer_mode: u32, }; const MeshInputBuilt = struct { @@ -504,6 +505,15 @@ fn reportModeFromC(report_mode: u32) !riley.ReportMode { }; } +fn bufferModeFromC(buffer_mode: u32) !rastcfg.BufferMode { + return switch (buffer_mode) { + @intFromEnum(rastcfg.BufferMode.tile_local) => .tile_local, + @intFromEnum(rastcfg.BufferMode.global_subpx_full) => .global_subpx_full, + @intFromEnum(rastcfg.BufferMode.global_subpx_stripe) => .global_subpx_stripe, + else => error.InvalidBufferMode, + }; +} + fn subpxCenterMapFromC(subpx_map: u32) !cam.SubPixelCenterMap { return switch (subpx_map) { @intFromEnum(cam.SubPixelCenterMap.full_in_mem) => .full_in_mem, @@ -1499,6 +1509,7 @@ fn buildRasterConfig( in_config.newton_seed_reuse, ); config.report = try reportModeFromC(in_config.report); + config.buffer_mode = try bufferModeFromC(in_config.buffer_mode); config.tile_size_min = if (in_config.tile_size_min == 0) config.tile_size_min else diff --git a/src/run_all_demos.zig b/src/run_all_demos.zig index 37503694..8d90523d 100644 --- a/src/run_all_demos.zig +++ b/src/run_all_demos.zig @@ -1,6 +1,7 @@ const std = @import("std"); const demo_sphere200 = @import("demo_sphere200.zig"); +const demo_psf = @import("demo_psf.zig"); const demo_rabbits = @import("demo_rabbits.zig"); const demo_rabbits_fields = @import("demo_rabbits_fields.zig"); const demo_rabbits_rgb = @import("demo_rabbits_rgb.zig"); @@ -9,6 +10,7 @@ const demo_stereocal = @import("demo_stereocal.zig"); pub fn main(init: std.process.Init) !void { try demo_sphere200.main(init); + try demo_psf.main(init); try demo_rabbits.main(init); try demo_rabbits_rgb.main(init); try demo_rabbits_fields.main(init); diff --git a/src/test_min.zig b/src/test_min.zig index d60f1216..dccecc13 100644 --- a/src/test_min.zig +++ b/src/test_min.zig @@ -95,7 +95,7 @@ test "MIN Suite: sphere200 and multimesh" { if (simd_on) { for (buffer_modes) |buffer_mode| { std.debug.print( - "\nRunning MIN Suite sphere200/base tests ({s})...\n", + "Running MIN Suite sphere200/base tests ({s})...\n", .{@tagName(buffer_mode)}, ); for (mesh_types) |mt| { From a763e7308db5752aa322bb512dccb5f01a844724 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Tue, 4 Aug 2026 07:48:53 +0100 Subject: [PATCH 05/38] Version number bump --- build.zig.zon | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index 579e04b2..d6ea8d07 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,6 +1,6 @@ .{ .name = .riley, - .version = "2026.7.1", + .version = "2026.8.0", .fingerprint = 0x7380980579fcd8b7, // Changing this has security and trust implications. .minimum_zig_version = "0.16.0", .dependencies = .{ diff --git a/pyproject.toml b/pyproject.toml index 9ec15b8d..45129f17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "riley-raster" -version = "2026.7.1" +version = "2026.8.0" description = "A python->Zig CPU rasteriser." authors = [ { name = "scepticalrabbit (Lloyd Fletcher)", email = "thescepticalrabbit@gmail.com" }, From 646896e4c05891ff0d68653f219b4d26d397a640 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Tue, 4 Aug 2026 10:06:03 +0100 Subject: [PATCH 06/38] Fixed SIMD lane overlap write issue --- src/dev_support/benchcommon.zig | 14 +- src/dev_support/benchdicuq.zig | 18 +- src/riley/zig/rasterengine_common.zig | 22 +- src/riley/zig/rasterengine_scalar.zig | 2 + src/riley/zig/rasterengine_simd.zig | 6 + src/riley/zig/rasterengineglobal_common.zig | 4 +- src/riley/zig/rasterengineglobal_scalar.zig | 11 +- src/riley/zig/rasterengineglobal_simd.zig | 11 +- src/riley/zig/rasterops.zig | 10 + src/riley/zig/report.zig | 248 ++++++++++++++++++-- src/riley/zig/riley.zig | 183 ++++++++++++++- src/riley/zig/shaderops_common.zig | 4 + src/riley/zig/shaderops_simd.zig | 50 +++- src/test_min.zig | 10 + 14 files changed, 524 insertions(+), 69 deletions(-) diff --git a/src/dev_support/benchcommon.zig b/src/dev_support/benchcommon.zig index dbfae036..a1362958 100644 --- a/src/dev_support/benchcommon.zig +++ b/src/dev_support/benchcommon.zig @@ -131,7 +131,7 @@ pub fn calcMetrics( frame_times: report.FrameTimes, bench_log: report.BenchLog, ) CalculatedMetrics { - const raster_sec = frame_times.raster_loop / 1e9; + const raster_sec = report.rasterStageTime(frame_times) / 1e9; const geom_tiling_sec = (frame_times.geometry_prep + frame_times.tile_overlap) / 1e9; const active_sec = frame_times.active_time / 1e9; @@ -1060,10 +1060,7 @@ fn runBenchmarkInternal( } var bench_capture_storage: [1]report.FrameBenchCapture = undefined; - const bench_capture: ?[]report.FrameBenchCapture = if (report_mode == .bench) - bench_capture_storage[0..] - else - null; + const bench_capture: ?[]report.FrameBenchCapture = bench_capture_storage[0..]; const needs_images_arr = config_run.save_strategy == .memory or config_run.save_strategy == .both; @@ -1105,7 +1102,7 @@ fn runBenchmarkInternal( else 0.0; const raster_ms = if (report_mode == .bench) - bench_capture_storage[0].bench_log.frame_times.raster_loop / 1e6 + report.rasterStageTime(bench_capture_storage[0].bench_log.frame_times) / 1e6 else 0.0; const metrics = if (report_mode == .bench) @@ -1148,10 +1145,7 @@ fn runBenchmarkInternal( images_mut.deinit(outer_alloc); } - const pipeline_times = if (report_mode == .bench) - bench_capture_storage[0].bench_log.frame_times - else - report.FrameTimes{}; + const pipeline_times = bench_capture_storage[0].bench_log.frame_times; return .{ .e2e_ms = e2e_ms, diff --git a/src/dev_support/benchdicuq.zig b/src/dev_support/benchdicuq.zig index b85a179b..a44e6faa 100644 --- a/src/dev_support/benchdicuq.zig +++ b/src/dev_support/benchdicuq.zig @@ -396,7 +396,7 @@ pub fn runBenchmark( .e2e_ms = e2e_ms, .geom_ms = (frame_times.geometry_prep + frame_times.tile_overlap) / 1e6, - .raster_ms = frame_times.raster_loop / 1e6, + .raster_ms = report.rasterStageTime(frame_times) / 1e6, .cam_ms = frame_times.cam_invert / 1e6, .resolve_ms = frame_times.scratch_resolve / 1e6, .fps = if (e2e_ms > 0) @@ -438,6 +438,16 @@ fn aggregateFrameTimes( capture.bench_log.frame_times.tile_overlap; frame_times.raster_loop += capture.bench_log.frame_times.raster_loop; + frame_times.global_subpx_times.buffer_setup += + capture.bench_log.frame_times.global_subpx_times.buffer_setup; + frame_times.global_subpx_times.tile_raster += + capture.bench_log.frame_times.global_subpx_times.tile_raster; + frame_times.global_subpx_times.resolve += + capture.bench_log.frame_times.global_subpx_times.resolve; + if (frame_times.global_subpx_stats == null) { + frame_times.global_subpx_stats = + capture.bench_log.frame_times.global_subpx_stats; + } frame_times.cam_invert += capture.bench_log.frame_times.cam_invert; frame_times.elem_loop += @@ -479,7 +489,7 @@ fn calcDicuqMetrics( frame_times: report.FrameTimes, bench_log: report.BenchLog, ) common.CalculatedMetrics { - const raster_sec = frame_times.raster_loop / 1e9; + const raster_sec = report.rasterStageTime(frame_times) / 1e9; const geom_tiling_sec = (frame_times.geometry_prep + frame_times.tile_overlap) / 1e9; const active_sec = frame_times.active_time / 1e9; @@ -617,7 +627,7 @@ fn buildFrameRows( .cam_time_ms = capture.bench_log.frame_times.cam_invert / 1e6, .elem_loop_time_ms = capture.bench_log.frame_times.elem_loop / 1e6, .resolve_time_ms = capture.bench_log.frame_times.scratch_resolve / 1e6, - .raster_time_ms = capture.bench_log.frame_times.raster_loop / 1e6, + .raster_time_ms = report.rasterStageTime(capture.bench_log.frame_times) / 1e6, .save_time_ms = capture.bench_log.frame_times.save_frame / 1e6, .frame_time_ms = capture.bench_log.frame_times.active_time / 1e6, .e2e_time_ms = null, @@ -627,7 +637,7 @@ fn buildFrameRows( ), .raster_tpx_mpx_s = calcFrameMPxPerSec( camera_inputs[capture.camera_idx], - capture.bench_log.frame_times.raster_loop, + report.rasterStageTime(capture.bench_log.frame_times), ), .frame_tpx_mpx_s = calcFrameActiveMPxPerSec( camera_inputs[capture.camera_idx], diff --git a/src/riley/zig/rasterengine_common.zig b/src/riley/zig/rasterengine_common.zig index 741b195b..8ce252b6 100644 --- a/src/riley/zig/rasterengine_common.zig +++ b/src/riley/zig/rasterengine_common.zig @@ -373,8 +373,8 @@ pub fn rasterSceneGlobalComm( raster_hulls: []const ?NDArray(F), target: *subpxframe.SubpxTarget, image_out_arr: *NDArray(F), -) !void { - if (tiling.active_tiles.len == 0) return; +) !usize { + if (tiling.active_tiles.len == 0) return 0; const WorkerState = comptime ThreadState(RasterBackend, report_mode); const GlobalTileRangeCtx = struct { @@ -412,7 +412,6 @@ pub fn rasterSceneGlobalComm( &worker_state.subpx_scratch, tile_rng_ctx.target, tile, - tile_rng_ctx.ctx_rast.camera.sub_sample, ); try rasterTileRaw( RasterBackend, @@ -429,16 +428,15 @@ pub fn rasterSceneGlobalComm( tile_rng_ctx.fields_num, tile_rng_ctx.subpx_tile_size, ); + worker_state.rasterized_tiles += 1; } } }; - // Global sub-pixel targets are shared directly by every tile. Unlike the - // tile-local backend, their depth state is not merged after rasterisation, - // so concurrent tiles can race when their raster domains intersect. Keep - // this pass ordered until global depth ownership/merging is introduced. - _ = requested_workers; - const workers_num: usize = 1; + const workers_num = scalingpolicy.rasterWorkers( + requested_workers, + tiling.active_tiles.len, + ); var chunk_exec = pce.ParaChunkExecutor.init(io, @intCast(workers_num)); var arena = std.heap.ArenaAllocator.init(outer_alloc); defer arena.deinit(); @@ -487,6 +485,11 @@ pub fn rasterSceneGlobalComm( } } } + var workers_used: usize = 0; + for (worker_states) |worker_state| { + if (worker_state.rasterized_tiles > 0) workers_used += 1; + } + return workers_used; } //------------------------------------------------------------------------------------------ @@ -1295,6 +1298,7 @@ fn ThreadState( arena: std.heap.ArenaAllocator, subpx_scratch: RasterBackend.SubpxScratchBuffs, log: report.LogType(report_mode), + rasterized_tiles: usize = 0, fn init( outer_alloc: std.mem.Allocator, diff --git a/src/riley/zig/rasterengine_scalar.zig b/src/riley/zig/rasterengine_scalar.zig index ea19b430..747f3ff2 100644 --- a/src/riley/zig/rasterengine_scalar.zig +++ b/src/riley/zig/rasterengine_scalar.zig @@ -42,6 +42,8 @@ const shadekerns = @import("shaderkernels.zig"); // -------------------------------------------------------------------------------------- pub const SubpxScratchBuffs = struct { + pub const exclusive_subpx_target = false; + stride_subpx: usize, inv_z: []F, image: MatSlice(F), diff --git a/src/riley/zig/rasterengine_simd.zig b/src/riley/zig/rasterengine_simd.zig index de6afece..4e5267ba 100644 --- a/src/riley/zig/rasterengine_simd.zig +++ b/src/riley/zig/rasterengine_simd.zig @@ -53,6 +53,8 @@ const shadekerns = @import("shaderkernels.zig"); // Public Constants & Public Types // -------------------------------------------------------------------------------------- pub const SubpxScratchBuffs = struct { + pub const exclusive_subpx_target = false; + stride_subpx: usize, inv_z: []align(64) F, image: MatSlice(F), @@ -602,6 +604,7 @@ fn rasterDirectSIMDImpl( scratch_y_u, ), .v_mask_active = v_depth_mask, + .exclusive_subpx_target = ScratchBuffs.exclusive_subpx_target, }; ShaderKern.shadeSIMD( @@ -1000,6 +1003,7 @@ fn rasterNewtonSIMDImpl( scratch_y_u, ), .v_mask_active = v_depth_mask, + .exclusive_subpx_target = ScratchBuffs.exclusive_subpx_target, }; ShaderKern.shadeSIMD( @@ -1370,6 +1374,7 @@ fn rasterSteppedSIMDFixP( scratch_y_u, ), .v_mask_active = v_depth_mask, + .exclusive_subpx_target = ScratchBuffs.exclusive_subpx_target, }; const v_weights = [3]VecSF{ v_w0, v_w1, v_w2 }; @@ -1640,6 +1645,7 @@ fn rasterSteppedSIMDFloat( scratch_y_u, ), .v_mask_active = v_depth_mask, + .exclusive_subpx_target = ScratchBuffs.exclusive_subpx_target, }; ShaderKern.shadeSIMD( diff --git a/src/riley/zig/rasterengineglobal_common.zig b/src/riley/zig/rasterengineglobal_common.zig index 723aceca..a0856615 100644 --- a/src/riley/zig/rasterengineglobal_common.zig +++ b/src/riley/zig/rasterengineglobal_common.zig @@ -33,8 +33,8 @@ pub fn rasterScene( raster_hulls: []const ?ndarray.NDArray(F), target: *subpxframe.SubpxTarget, image_out_arr: *ndarray.NDArray(F), -) !void { - try rasterengine.rasterSceneGlobalComm( +) !usize { + return rasterengine.rasterSceneGlobalComm( RasterBackend, report_mode, outer_alloc, diff --git a/src/riley/zig/rasterengineglobal_scalar.zig b/src/riley/zig/rasterengineglobal_scalar.zig index e55ad60a..44cc603c 100644 --- a/src/riley/zig/rasterengineglobal_scalar.zig +++ b/src/riley/zig/rasterengineglobal_scalar.zig @@ -18,6 +18,8 @@ const mo = @import("meshpipeline.zig"); const subpxframe = @import("subpxframe.zig"); const GlobalSubpxScratchBuffs = struct { + pub const exclusive_subpx_target = true; + stride_subpx: usize, inv_z: []F, image: @import("matslice.zig").MatSlice(F), @@ -85,14 +87,13 @@ pub const GlobalBackend = struct { scratch: *GlobalSubpxScratchBuffs, target: *subpxframe.SubpxTarget, tile: rops.ActiveTile, - sub_sample: u32, ) void { scratch.image = target.image; scratch.target_stride_subpx = target.domain.storage_w_subpx; scratch.target_subx_min = target.global_subx_min; scratch.target_suby_min = target.global_suby_min; - scratch.tile_subx_min = tile.scratch_x_px_min * @as(i32, @intCast(sub_sample)); - scratch.tile_suby_min = tile.scratch_y_px_min * @as(i32, @intCast(sub_sample)); + scratch.tile_subx_min = tile.scratch_subx_min; + scratch.tile_suby_min = tile.scratch_suby_min; } pub fn RasterEngine( @@ -121,8 +122,8 @@ pub fn rasterScene( raster_hulls: []const ?ndarray.NDArray(F), target: *subpxframe.SubpxTarget, image_out_arr: *ndarray.NDArray(F), -) !void { - try common.rasterScene( +) !usize { + return common.rasterScene( GlobalBackend, report_mode, outer_alloc, diff --git a/src/riley/zig/rasterengineglobal_simd.zig b/src/riley/zig/rasterengineglobal_simd.zig index 795677ea..db8d10b3 100644 --- a/src/riley/zig/rasterengineglobal_simd.zig +++ b/src/riley/zig/rasterengineglobal_simd.zig @@ -18,6 +18,8 @@ const mo = @import("meshpipeline.zig"); const subpxframe = @import("subpxframe.zig"); const GlobalSubpxScratchBuffs = struct { + pub const exclusive_subpx_target = true; + stride_subpx: usize, inv_z: []align(64) F, image: @import("matslice.zig").MatSlice(F), @@ -92,14 +94,13 @@ const GlobalBackend = struct { scratch: *GlobalSubpxScratchBuffs, target: *subpxframe.SubpxTarget, tile: rops.ActiveTile, - sub_sample: u32, ) void { scratch.image = target.image; scratch.target_stride_subpx = target.domain.storage_w_subpx; scratch.target_subx_min = target.global_subx_min; scratch.target_suby_min = target.global_suby_min; - scratch.tile_subx_min = tile.scratch_x_px_min * @as(i32, @intCast(sub_sample)); - scratch.tile_suby_min = tile.scratch_y_px_min * @as(i32, @intCast(sub_sample)); + scratch.tile_subx_min = tile.scratch_subx_min; + scratch.tile_suby_min = tile.scratch_suby_min; } pub fn RasterEngine( @@ -128,8 +129,8 @@ pub fn rasterScene( raster_hulls: []const ?ndarray.NDArray(F), target: *subpxframe.SubpxTarget, image_out_arr: *ndarray.NDArray(F), -) !void { - try common.rasterScene( +) !usize { + return common.rasterScene( GlobalBackend, report_mode, outer_alloc, diff --git a/src/riley/zig/rasterops.zig b/src/riley/zig/rasterops.zig index ef56b9a5..4d3a2d55 100644 --- a/src/riley/zig/rasterops.zig +++ b/src/riley/zig/rasterops.zig @@ -529,6 +529,16 @@ pub const ActiveTile = struct { scratch_y_px_min: i32, scratch_x_px_max: i32, scratch_y_px_max: i32, + // Global sub-pixel modes populate these exact target ownership bounds. + // Tile-local modes do not use them. + core_subx_min: i32 = 0, + core_suby_min: i32 = 0, + core_subx_max: i32 = 0, + core_suby_max: i32 = 0, + scratch_subx_min: i32 = 0, + scratch_suby_min: i32 = 0, + scratch_subx_max: i32 = 0, + scratch_suby_max: i32 = 0, }; pub const TilingOverlaps = struct { diff --git a/src/riley/zig/report.zig b/src/riley/zig/report.zig index 2d64e76d..74cf0187 100644 --- a/src/riley/zig/report.zig +++ b/src/riley/zig/report.zig @@ -25,6 +25,31 @@ pub const ReportMode = rastcfg.ReportMode; pub const OffLog = struct {}; +pub const GlobalSubpxStats = struct { + mode: rastcfg.BufferMode = .tile_local, + output_w_subpx: usize = 0, + output_h_subpx: usize = 0, + outer_halo_subpx: usize = 0, + tile_core_subpx: usize = 0, + tile_scratch_subpx: usize = 0, + tile_grid_count: usize = 0, + active_tile_count: usize = 0, + overlap_refs_total: usize = 0, + overlap_refs_max: usize = 0, + stripe_core_subpx: usize = 0, + stripe_count: usize = 0, + final_stripe_core_subpx: usize = 0, + stripe_storage_w_subpx: usize = 0, + stripe_storage_h_subpx: usize = 0, + stripe_storage_samples_cleared: u64 = 0, +}; + +pub const GlobalSubpxTimes = struct { + buffer_setup: F = 0, + tile_raster: F = 0, + resolve: F = 0, +}; + pub const FrameTimes = struct { setup_frame_buff: F = 0, prepare_frame_context: F = 0, @@ -35,14 +60,28 @@ pub const FrameTimes = struct { geom_remap_inds: F = 0, tile_overlap: F = 0, raster_loop: F = 0, + raster_workers_requested: u16 = 0, + raster_workers_used: u16 = 0, cam_invert: F = 0, elem_loop: F = 0, scratch_resolve: F = 0, + global_subpx_times: GlobalSubpxTimes = .{}, + global_subpx_stats: ?GlobalSubpxStats = null, save_frame: F = 0, active_time: F = 0, latency_time: F = 0, }; +pub fn rasterStageTime(frame_times: FrameTimes) F { + if (frame_times.global_subpx_stats != null) { + return frame_times.tile_overlap + + frame_times.global_subpx_times.buffer_setup + + frame_times.global_subpx_times.tile_raster + + frame_times.global_subpx_times.resolve; + } + return frame_times.raster_loop; +} + pub const EndToEndTimes = struct { setup_time: F = 0, setup_other_time: F = 0, @@ -1750,6 +1789,18 @@ pub fn standardReport( nodes_per_elem: F, bench_log: *const BenchLog, ) !void { + if (frame_times.global_subpx_stats) |stats| { + return globalSubpxStandardReport( + io, + camera, + frame_idx, + camera_idx, + frame_times, + stats, + out_dir_path, + bench_log, + ); + } var buff: [4096]u8 = undefined; var stdout_writer = std.Io.File.stdout().writer(io, &buff); const writer = &stdout_writer.interface; @@ -1786,7 +1837,7 @@ pub fn standardReport( const print_break = [_]u8{'='} ** 80; const print_break_inner = [_]u8{'-'} ** 80; - try writer.print("\n{s}\nRaster Frame Times: Frame {d}, Camera {d}\n{s}\n", .{ + try writer.print("{s}\nRILEY TILE LOCAL RASTER: Frame {d}, Camera {d}\n{s}\n", .{ print_break, frame_idx, camera_idx, @@ -1892,17 +1943,163 @@ pub fn standardReport( try writer.print("Raster Throughput = {d:.2} MPx/s\n", .{mpx_sec}); try writer.print("Active Frame Throughput = {d:.2} MPx/s\n", .{frame_mpx_sec}); - try writer.print("{s}\n", .{print_break}); - try writer.print("Frame Output Path =\n", .{}); if (out_dir_path) |path| { - try writer.print(" {s}\n", .{path}); + try writer.print("Output Frame Path = {s}\n", .{path}); } else { - try writer.print(" not written (memory output)\n", .{}); + try writer.print("Output Frame Path = not written (memory output)\n", .{}); } try writer.print("{s}\n", .{print_break}); try writer.flush(); } +fn globalSubpxStandardReport( + io: std.Io, + camera: *const cam.CameraPrepared, + frame_idx: usize, + camera_idx: usize, + frame_times: FrameTimes, + stats: GlobalSubpxStats, + out_dir_path: ?[]const u8, + bench_log: *const BenchLog, +) !void { + var buff: [4096]u8 = undefined; + var stdout_writer = std.Io.File.stdout().writer(io, &buff); + const writer = &stdout_writer.interface; + const stats_break = [_]u8{'='} ** 80; + const section_break = [_]u8{'-'} ** 80; + const conv: F = 1.0 / 1.0e6; + const output_samples = @as(F, @floatFromInt( + stats.output_w_subpx * stats.output_h_subpx, + )); + const output_px = output_samples / @as(F, @floatFromInt( + camera.sub_sample * camera.sub_sample, + )); + const active_tiles = @as(F, @floatFromInt(stats.active_tile_count)); + const mean_refs = if (stats.active_tile_count > 0) + @as(F, @floatFromInt(stats.overlap_refs_total)) / active_tiles + else + 0.0; + const empty_tiles = stats.tile_grid_count -| stats.active_tile_count; + const buffer_planning = frame_times.tile_overlap + + frame_times.global_subpx_times.buffer_setup; + const global_stage = rasterStageTime(frame_times); + const raster_sec = frame_times.global_subpx_times.tile_raster / 1e9; + const resolve_sec = frame_times.global_subpx_times.resolve / 1e9; + const stage_sec = global_stage / 1e9; + const active_sec = frame_times.active_time / 1e9; + const shaded = @as(F, @floatFromInt(bench_log.total_shaded_px)); + const shade_rate = if (raster_sec > 0) + shaded / (raster_sec * 1e6) + else + 0.0; + const sample_rate = if (raster_sec > 0) + output_samples / (raster_sec * 1e6) + else + 0.0; + const resolve_rate = if (resolve_sec > 0) + output_px / (resolve_sec * 1e6) + else + 0.0; + const stage_rate = if (stage_sec > 0) + output_px / (stage_sec * 1e6) + else + 0.0; + const active_rate = if (active_sec > 0) + output_px / (active_sec * 1e6) + else + 0.0; + + try writer.print("{s}\nRILEY GLOBAL SUBPIXEL RASTER: Frame {d}, Camera {d}\n{s}\n", .{ + stats_break, + frame_idx, + camera_idx, + stats_break, + }); + try writer.print("Mode = {s}\n", .{@tagName(stats.mode)}); + try writer.print("Output Core = {d} x {d} px | {d} x {d} subpx\n", .{ + camera.pixels_num[0], + camera.pixels_num[1], + stats.output_w_subpx, + stats.output_h_subpx, + }); + try writer.print("Subsample = {d} x {d}\n", .{ + camera.sub_sample, + camera.sub_sample, + }); + try writer.print("PSF / Support = {s} | {d} px\n", .{ + @tagName(camera.psf), + camera.prep_psf.halo_px, + }); + try writer.print("{s}\nTILE DOMAIN\n", .{section_break}); + try writer.print("Tile Core = {d} x {d} subpx\n", .{ + stats.tile_core_subpx, + stats.tile_core_subpx, + }); + try writer.print("Interior Tile Halo = 0 x 0 px\n", .{}); + try writer.print("Outer Frame Halo = {d} x {d} subpx\n", .{ + stats.outer_halo_subpx, + stats.outer_halo_subpx, + }); + try writer.print("Scratch Capacity = {d} x {d} subpx\n", .{ + stats.tile_scratch_subpx, + stats.tile_scratch_subpx, + }); + try writer.print("Tile Grid / Active / Empty = {d} / {d} / {d}\n", .{ + stats.tile_grid_count, + stats.active_tile_count, + empty_tiles, + }); + try writer.print("Overlap Refs / Active Tile = mean {d:.2} | max {d}\n", .{ + mean_refs, + stats.overlap_refs_max, + }); + if (stats.mode == .global_subpx_stripe) { + const repeated_storage = stats.stripe_storage_samples_cleared -| + stats.output_w_subpx * stats.output_h_subpx; + try writer.print("{s}\nSTRIPE DOMAIN\n", .{section_break}); + try writer.print("Core Height = {d} subpx\n", .{stats.stripe_core_subpx}); + try writer.print("Stripe Count / Final Height = {d} / {d} subpx\n", .{ + stats.stripe_count, + stats.final_stripe_core_subpx, + }); + try writer.print("Stripe Edge Halo = x: {d} | y: {d} subpx\n", .{ + stats.outer_halo_subpx, + stats.outer_halo_subpx, + }); + try writer.print("Peak Stripe Storage = {d} x {d} subpx\n", .{ + stats.stripe_storage_w_subpx, + stats.stripe_storage_h_subpx, + }); + try writer.print("Repeated Halo Storage = {d} samples\n", .{repeated_storage}); + } + try writer.print("{s}\nWALL-CLOCK TIMINGS\n", .{section_break}); + try writer.print("Global Buffer + Planning = {d:.3} ms\n", .{buffer_planning * conv}); + try writer.print("Tile Raster = {d:.3} ms\n", .{ + frame_times.global_subpx_times.tile_raster * conv, + }); + try writer.print("Global Resolve = {d:.3} ms\n", .{ + frame_times.global_subpx_times.resolve * conv, + }); + try writer.print("Global Raster Stage = {d:.3} ms\n", .{global_stage * conv}); + try writer.print("Save Frame = {d:.3} ms\n", .{frame_times.save_frame * conv}); + try writer.print("Active Frame = {d:.3} ms\n", .{frame_times.active_time * conv}); + try writer.print("Frame Latency = {d:.3} ms\n", .{frame_times.latency_time * conv}); + try writer.print("{s}\nRATES\n", .{section_break}); + try writer.print("Executed Shade Rate = {d:.2} Msubpx/s\n", .{shade_rate}); + try writer.print("Output Sample Rate = {d:.2} Msubpx/s\n", .{sample_rate}); + try writer.print("Global Resolve Rate = {d:.2} MPx/s\n", .{resolve_rate}); + try writer.print("Global Raster Stage Rate = {d:.2} MPx/s\n", .{stage_rate}); + try writer.print("Active Frame Rate = {d:.2} MPx/s\n", .{active_rate}); + try writer.print("{s}\n", .{section_break}); + if (out_dir_path) |path| { + try writer.print("Output Frame Path = {s}\n", .{path}); + } else { + try writer.print("Output Frame Path = not written (memory output)\n", .{}); + } + try writer.print("{s}\n", .{stats_break}); + try writer.flush(); +} + pub fn printRenderSummary( io: std.Io, cameras: []const cam.CameraPrepared, @@ -1922,14 +2119,21 @@ pub fn printRenderSummary( } total_pixels *= num_time; - const actual_tile_size = scalingpolicy.tileSize( - config.tile_size_override, - config.tile_size_min, - config.tile_size_max, - cameras[0].pixels_num, - cameras[0].sub_sample, - cameras[0].prep_psf.halo_px, - ); + const actual_tile_size = switch (config.buffer_mode) { + .tile_local => scalingpolicy.tileSize( + config.tile_size_override, + config.tile_size_min, + config.tile_size_max, + cameras[0].pixels_num, + cameras[0].sub_sample, + cameras[0].prep_psf.halo_px, + ), + .global_subpx_full, .global_subpx_stripe => @divExact( + config.global_subpx_tile_size_override orelse + config.global_subpx_tile_size_min, + @as(u16, @intCast(cameras[0].sub_sample)), + ), + }; const total_frames = cameras.len * num_time; const total_render_ms = end_to_end_times.total_time / 1e6; @@ -1950,7 +2154,7 @@ pub fn printRenderSummary( var total_raster_ns: F = 0.0; if (bench_capture) |capture| { for (capture) |frame_capture| { - total_raster_ns += frame_capture.bench_log.frame_times.raster_loop; + total_raster_ns += rasterStageTime(frame_capture.bench_log.frame_times); } } const total_raster_sec = total_raster_ns / 1e9; @@ -1964,7 +2168,7 @@ pub fn printRenderSummary( const writer = &stdout_writer.interface; const print_break = [_]u8{'='} ** 80; - try writer.print("\n{s}\nRiley Raster Render Summary\n{s}\n", .{ + try writer.print("{s}\nRILEY RASTER RENDER SUMMARY\n{s}\n", .{ print_break, print_break, }); @@ -1974,16 +2178,12 @@ pub fn printRenderSummary( if (config.buffer_mode != .tile_local) { const global_tile_subpx = @as(usize, actual_tile_size) * @as(usize, cameras[0].sub_sample); - const requested_stripe_subpx = config.global_subpx_stripe_size_override orelse - config.global_subpx_stripe_size_min; - const stripe_subpx = @max( - @as(usize, cameras[0].sub_sample), - (@as(usize, requested_stripe_subpx) / - @as(usize, cameras[0].sub_sample)) * - @as(usize, cameras[0].sub_sample), - ); try writer.print("Global Raster Tile = {d} subpx\n", .{global_tile_subpx}); - try writer.print("Global Stripe Height = {d} subpx\n", .{stripe_subpx}); + if (config.buffer_mode == .global_subpx_stripe) { + const stripe_subpx = config.global_subpx_stripe_size_override orelse + config.global_subpx_stripe_size_min; + try writer.print("Global Stripe Height = {d} subpx\n", .{stripe_subpx}); + } } try writer.print("Setup Time = {d:.3} ms\n", .{setup_ms}); // try writer.print("Setup other = {d:.3} ms\n", .{ diff --git a/src/riley/zig/riley.zig b/src/riley/zig/riley.zig index 004e19e4..42524c37 100644 --- a/src/riley/zig/riley.zig +++ b/src/riley/zig/riley.zig @@ -1034,6 +1034,7 @@ fn sceneTileOverlapBinning( try sceneGlobalTileElemOverlap( arena_alloc, ctx.actual_tile_size, + job.camera.sub_sample, @intCast(job.camera.pixels_num[0]), @intCast(job.camera.pixels_num[1]), 0, @@ -1051,6 +1052,7 @@ fn sceneTileOverlapBinning( fn sceneGlobalTileElemOverlap( outer_alloc: std.mem.Allocator, tile_size: u16, + sub_sample: u32, screen_px_x: u16, screen_px_y: u16, core_y_px_min: u16, @@ -1071,6 +1073,7 @@ fn sceneGlobalTileElemOverlap( defer tiles.deinit(outer_alloc); var overlaps: std.ArrayList(rops.OverlapBBox) = .empty; defer overlaps.deinit(outer_alloc); + const sub_samp: i32 = @intCast(sub_sample); for (0..tiles_y) |ty| { const y_min: u16 = @intCast(core_y_px_min + ty * tile_size); @@ -1122,6 +1125,14 @@ fn sceneGlobalTileElemOverlap( .scratch_y_px_min = scratch_y_min, .scratch_x_px_max = scratch_x_max, .scratch_y_px_max = scratch_y_max, + .core_subx_min = @as(i32, x_min) * sub_samp, + .core_suby_min = @as(i32, y_min) * sub_samp, + .core_subx_max = @as(i32, x_max) * sub_samp, + .core_suby_max = @as(i32, y_max) * sub_samp, + .scratch_subx_min = scratch_x_min * sub_samp, + .scratch_suby_min = scratch_y_min * sub_samp, + .scratch_subx_max = scratch_x_max * sub_samp, + .scratch_suby_max = scratch_y_max * sub_samp, }); } } @@ -1131,6 +1142,19 @@ fn sceneGlobalTileElemOverlap( }; } +fn recordGlobalTilingStats( + stats: *report.GlobalSubpxStats, + tiling: rops.TilingOverlaps, + tile_grid_count: usize, +) void { + stats.tile_grid_count += tile_grid_count; + stats.active_tile_count += tiling.active_tiles.len; + stats.overlap_refs_total += tiling.overlaps.len; + for (tiling.active_tiles) |tile| { + stats.overlap_refs_max = @max(stats.overlap_refs_max, tile.overlap_count); + } +} + fn runRasterStage( outer_alloc: std.mem.Allocator, io: std.Io, @@ -1548,6 +1572,7 @@ fn rasterFrame( const report_ptr = getFrameReportPtr(report_mode, ctx); const ctx_report = report.ReportContext(report_mode){ .log = report_ptr }; const time_start_loop = Timestamp.now(io, .awake); + ctx.frame_times.raster_workers_requested = raster_workers; const ctx_rast = rops.RasterContext{ .camera = input.camera, @@ -1556,6 +1581,20 @@ fn rasterFrame( .tile_size = ctx.actual_tile_size, }; var global_resolve_time_ns: F = 0.0; + if (input.config.buffer_mode != .tile_local) { + const sub_samp: usize = @intCast(input.camera.sub_sample); + const halo_px = input.config.raster_halo_px_override orelse + input.camera.prep_psf.halo_px; + ctx.frame_times.global_subpx_stats = .{ + .mode = input.config.buffer_mode, + .output_w_subpx = @as(usize, input.camera.pixels_num[0]) * sub_samp, + .output_h_subpx = @as(usize, input.camera.pixels_num[1]) * sub_samp, + .outer_halo_subpx = @as(usize, halo_px) * sub_samp, + .tile_core_subpx = @as(usize, ctx.actual_tile_size) * sub_samp, + .tile_scratch_subpx = (@as(usize, ctx.actual_tile_size) + 2 * @as(usize, halo_px)) * + sub_samp, + }; + } switch (input.config.buffer_mode) { .tile_local => try rasterengine.rasterScene( @@ -1571,6 +1610,7 @@ fn rasterFrame( &ctx.frame_arr, ), .global_subpx_full => { + const time_start_buffer_setup = Timestamp.now(io, .awake); const sub_samp: usize = @intCast(input.camera.sub_sample); const halo_px = input.config.raster_halo_px_override orelse input.camera.prep_psf.halo_px; @@ -1589,8 +1629,25 @@ fn rasterFrame( input.config.background_value, ); defer target.deinit(outer_alloc); + ctx.frame_times.global_subpx_times.buffer_setup += @floatFromInt( + time_start_buffer_setup.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, + ); + if (ctx.frame_times.global_subpx_stats) |*stats| { + const tiles_x = std.math.divCeil( + usize, + input.camera.pixels_num[0], + ctx.actual_tile_size, + ) catch unreachable; + const tiles_y = std.math.divCeil( + usize, + input.camera.pixels_num[1], + ctx.actual_tile_size, + ) catch unreachable; + recordGlobalTilingStats(stats, ctx.tiling.?, tiles_x * tiles_y); + } - try rasterengineglobal.rasterScene( + const time_start_tile_raster = Timestamp.now(io, .awake); + const workers_used = try rasterengineglobal.rasterScene( report_mode, outer_alloc, io, @@ -1603,6 +1660,10 @@ fn rasterFrame( &target, &ctx.frame_arr, ); + ctx.frame_times.raster_workers_used = @intCast(workers_used); + ctx.frame_times.global_subpx_times.tile_raster += @floatFromInt( + time_start_tile_raster.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, + ); const time_start_resolve = Timestamp.now(io, .awake); scratchresolveglobal.resolve( &target, @@ -1613,6 +1674,7 @@ fn rasterFrame( global_resolve_time_ns = @floatFromInt( time_start_resolve.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, ); + ctx.frame_times.global_subpx_times.resolve += global_resolve_time_ns; }, .global_subpx_stripe => { const sub_samp: usize = @intCast(input.camera.sub_sample); @@ -1626,6 +1688,7 @@ fn rasterFrame( input.config.global_subpx_stripe_size_min; const stripe_subpx: usize = requested_stripe_subpx; const first_core_suby_max = @min(image_h_subpx, stripe_subpx); + const time_start_buffer_setup = Timestamp.now(io, .awake); var stripe = try subpxframe.SubpxStripe.init( outer_alloc, input.num_fields, @@ -1637,6 +1700,9 @@ fn rasterFrame( input.config.background_value, ); defer stripe.deinit(outer_alloc); + ctx.frame_times.global_subpx_times.buffer_setup += @floatFromInt( + time_start_buffer_setup.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, + ); var core_suby_min: usize = 0; while (core_suby_min < image_h_subpx) { @@ -1644,6 +1710,7 @@ fn rasterFrame( image_h_subpx, core_suby_min + stripe_subpx, ); + const time_start_buffer_plan = Timestamp.now(io, .awake); stripe.reset( @intCast(core_suby_min), @intCast(core_suby_max), @@ -1658,6 +1725,7 @@ fn rasterFrame( stripe_tiling = try sceneGlobalTileElemOverlap( outer_alloc, ctx.actual_tile_size, + input.camera.sub_sample, @intCast(input.camera.pixels_num[0]), @intCast(input.camera.pixels_num[1]), @intCast(core_suby_min / sub_samp), @@ -1668,6 +1736,32 @@ fn rasterFrame( ); stripe_tiling_owned = true; } + ctx.frame_times.global_subpx_times.buffer_setup += @floatFromInt( + time_start_buffer_plan.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, + ); + if (ctx.frame_times.global_subpx_stats) |*stats| { + const tiles_x = std.math.divCeil( + usize, + input.camera.pixels_num[0], + ctx.actual_tile_size, + ) catch unreachable; + const stripe_h_px = (core_suby_max - core_suby_min) / sub_samp; + const tiles_y = std.math.divCeil( + usize, + stripe_h_px, + ctx.actual_tile_size, + ) catch unreachable; + recordGlobalTilingStats(stats, stripe_tiling, tiles_x * tiles_y); + stats.stripe_core_subpx = stripe_subpx; + stats.stripe_count += 1; + stats.final_stripe_core_subpx = core_suby_max - core_suby_min; + stats.stripe_storage_w_subpx = stripe.target.domain.storage_w_subpx; + stats.stripe_storage_h_subpx = stripe.target.domain.storage_h_subpx; + stats.stripe_storage_samples_cleared += @intCast( + stripe.target.domain.storage_w_subpx * + stripe.target.domain.storage_h_subpx, + ); + } errdefer { if (stripe_tiling_owned) { outer_alloc.free(stripe_tiling.active_tiles); @@ -1675,7 +1769,8 @@ fn rasterFrame( } } - try rasterengineglobal.rasterScene( + const time_start_tile_raster = Timestamp.now(io, .awake); + const workers_used = try rasterengineglobal.rasterScene( report_mode, outer_alloc, io, @@ -1688,6 +1783,13 @@ fn rasterFrame( &stripe.target, &ctx.frame_arr, ); + ctx.frame_times.raster_workers_used = @max( + ctx.frame_times.raster_workers_used, + @as(u16, @intCast(workers_used)), + ); + ctx.frame_times.global_subpx_times.tile_raster += @floatFromInt( + time_start_tile_raster.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, + ); const time_start_resolve = Timestamp.now(io, .awake); scratchresolveglobal.resolveRows( &stripe.target, @@ -1701,6 +1803,9 @@ fn rasterFrame( global_resolve_time_ns += @floatFromInt( time_start_resolve.durationTo(time_end_resolve).raw.nanoseconds, ); + ctx.frame_times.global_subpx_times.resolve += @floatFromInt( + time_start_resolve.durationTo(time_end_resolve).raw.nanoseconds, + ); if (stripe_tiling_owned) { outer_alloc.free(stripe_tiling.active_tiles); outer_alloc.free(stripe_tiling.overlaps); @@ -1716,6 +1821,10 @@ fn rasterFrame( ); if (input.config.buffer_mode != .tile_local) { ctx.frame_times.scratch_resolve = global_resolve_time_ns; + if (report.getBenchLog(report_mode, report_ptr)) |bench_log| { + ctx.frame_times.cam_invert = bench_log.cam_time_ns; + ctx.frame_times.elem_loop = bench_log.elem_time_ns; + } } else if (report.getBenchLog(report_mode, report_ptr)) |bench_log| { ctx.frame_times.cam_invert = bench_log.cam_time_ns; ctx.frame_times.elem_loop = bench_log.elem_time_ns; @@ -1770,3 +1879,73 @@ fn renderGroupSaveIo(render_group: RenderGroupSpec) std.Io { fn saveOverlapEnabled(config: RasterConfig) bool { return config.save_strategy == .disk and config.disk_save_overlap; } + +test "global sub-pixel tiles own disjoint cores and retain halo only at frame edges" { + var elem_bboxes = [_]rops.ElemBBox{.{ + .elem_idx = 0, + .x_min = -2, + .x_max = 12, + .y_min = -2, + .y_max = 11, + }}; + const elems_in_image = [_]usize{1}; + const elem_bboxes_by_mesh = [_][]rops.ElemBBox{elem_bboxes[0..]}; + const sub_sample: u32 = 2; + const halo_px: u16 = 2; + const screen_w_px: u16 = 10; + const screen_h_px: u16 = 9; + const screen_w_subpx: i32 = screen_w_px * sub_sample; + const screen_h_subpx: i32 = screen_h_px * sub_sample; + const halo_subpx: i32 = halo_px * sub_sample; + + const tiling = try sceneGlobalTileElemOverlap( + std.testing.allocator, + 4, + sub_sample, + screen_w_px, + screen_h_px, + 0, + screen_h_px, + halo_px, + elems_in_image[0..], + elem_bboxes_by_mesh[0..], + ); + defer std.testing.allocator.free(tiling.active_tiles); + defer std.testing.allocator.free(tiling.overlaps); + + try std.testing.expectEqual(@as(usize, 9), tiling.active_tiles.len); + for (tiling.active_tiles) |tile| { + try std.testing.expectEqual( + if (tile.core_subx_min == 0) -halo_subpx else tile.core_subx_min, + tile.scratch_subx_min, + ); + try std.testing.expectEqual( + if (tile.core_subx_max == screen_w_subpx) + screen_w_subpx + halo_subpx + else + tile.core_subx_max, + tile.scratch_subx_max, + ); + try std.testing.expectEqual( + if (tile.core_suby_min == 0) -halo_subpx else tile.core_suby_min, + tile.scratch_suby_min, + ); + try std.testing.expectEqual( + if (tile.core_suby_max == screen_h_subpx) + screen_h_subpx + halo_subpx + else + tile.core_suby_max, + tile.scratch_suby_max, + ); + } + + for (tiling.active_tiles, 0..) |tile_a, aa| { + for (tiling.active_tiles[aa + 1 ..]) |tile_b| { + const overlaps_x = tile_a.scratch_subx_min < tile_b.scratch_subx_max and + tile_b.scratch_subx_min < tile_a.scratch_subx_max; + const overlaps_y = tile_a.scratch_suby_min < tile_b.scratch_suby_max and + tile_b.scratch_suby_min < tile_a.scratch_suby_max; + try std.testing.expect(!(overlaps_x and overlaps_y)); + } + } +} diff --git a/src/riley/zig/shaderops_common.zig b/src/riley/zig/shaderops_common.zig index 3d4e7a0a..2eda523b 100644 --- a/src/riley/zig/shaderops_common.zig +++ b/src/riley/zig/shaderops_common.zig @@ -380,6 +380,10 @@ pub const ShadeContext = struct { global_subx: usize, global_suby: usize, v_mask_active: ?buildconfig.VecSB = null, + // Global sub-pixel tiles own disjoint target samples. Their final SIMD + // vector may straddle a tile edge, so inactive lanes must not perform a + // read-modify-write against the neighbouring tile's target samples. + exclusive_subpx_target: bool = false, }; pub fn InterpData(comptime N: usize) type { diff --git a/src/riley/zig/shaderops_simd.zig b/src/riley/zig/shaderops_simd.zig index 2c7c2ef9..89eecf51 100644 --- a/src/riley/zig/shaderops_simd.zig +++ b/src/riley/zig/shaderops_simd.zig @@ -30,6 +30,32 @@ const simdops = @import("simdops.zig"); pub const fillNodalClipScal = scal.fillNodalClipScal; pub const fillNodalPerspScal = scal.fillNodalPerspScal; +inline fn storeShadeSIMD( + subpx_vals: []F, + start_u: usize, + ctx_shade: comm.ShadeContext, + v_mask_active: VecSB, + v_vals: VecSF, +) void { + if (!ctx_shade.exclusive_subpx_target) { + simdops.storeMaskedVecSF( + subpx_vals, + start_u, + v_mask_active, + v_vals, + ); + return; + } + + const mask_arr: [S]bool = v_mask_active; + const vals_arr: [S]F = v_vals; + inline for (0..S) |lane| { + if (mask_arr[lane]) { + subpx_vals[start_u + lane] = vals_arr[lane]; + } + } +} + pub inline fn fillNodalClipSIMD( comptime N: usize, ctx_shade: comm.ShadeContext, @@ -54,9 +80,10 @@ pub inline fn fillNodalClipSIMD( const v_final = v_weighted_sum * v_splat_mul + v_splat_add; const flat_idx = ff * px_stride + ctx_shade.scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, ctx_shade.v_mask_active.?, v_final, ); @@ -90,9 +117,10 @@ pub inline fn fillNodalPerspSIMD( const v_final = (v_weighted_sum * v_subpx_z) * v_splat_mul + v_splat_add; const flat_idx = ff * px_stride + ctx_shade.scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, ctx_shade.v_mask_active.?, v_final, ); @@ -162,9 +190,10 @@ pub inline fn fillTexClipSIMD( const flat_idx = ch * px_stride + ctx_shade.scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, v_mask_active, v_final, ); @@ -236,9 +265,10 @@ pub inline fn fillTexPerspSIMD( inline for (0..C) |ch| { const v_final = sampled_vecs[ch] * v_splat_mul + v_splat_add; const flat_idx = ch * px_stride + ctx_shade.scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, v_mask_active, v_final, ); @@ -625,9 +655,10 @@ pub inline fn fillFuncClipSIMD( const flat_idx = scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, v_mask_active, v_final, ); @@ -646,9 +677,10 @@ pub inline fn fillFuncClipSIMD( const v_final = v_vals[ch] * v_mul + v_add; const flat_idx = ch * px_stride + scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, v_mask_active, v_final, ); @@ -717,9 +749,10 @@ pub inline fn fillFuncPerspSIMD( const v_final = v_eval * v_mul + v_add; const flat_idx = scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, v_mask_active, v_final, ); @@ -736,9 +769,10 @@ pub inline fn fillFuncPerspSIMD( const v_add = @as(VecSF, @splat(shader.scale_add)); const v_final = v_vals[ch] * v_mul + v_add; const flat_idx = ch * px_stride + scratch_idx; - simdops.storeMaskedVecSF( + storeShadeSIMD( spx_image_scratch.slice, flat_idx, + ctx_shade, v_mask_active, v_final, ); diff --git a/src/test_min.zig b/src/test_min.zig index dccecc13..ef45644c 100644 --- a/src/test_min.zig +++ b/src/test_min.zig @@ -155,6 +155,16 @@ test "MIN Suite: sphere200 and multimesh" { "", ); defer result.deinit(allocator); + if (buffer_mode != .tile_local) { + try std.testing.expectEqual( + tcfg.MAX_RASTER_WORKERS_PER_JOB, + result.pipeline_times.raster_workers_requested, + ); + try std.testing.expectEqual( + tcfg.MAX_RASTER_WORKERS_PER_JOB, + result.pipeline_times.raster_workers_used, + ); + } const gold_case_dir = try std.fs.path.join( allocator, From 2c4fffc853f706ed53743f9dbfb7641075fae749 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Tue, 4 Aug 2026 11:25:41 +0100 Subject: [PATCH 07/38] Added threading to global scratch resolve --- src/demo_psf.zig | 10 +- src/riley/pydemos/demo_psf.py | 6 +- src/riley/zig/report.zig | 10 + src/riley/zig/riley.zig | 16 +- src/riley/zig/scratchresolveglobal.zig | 26 +- src/riley/zig/scratchresolveglobal_common.zig | 285 ++++++++++++++++++ src/riley/zig/scratchresolveglobal_scalar.zig | 30 +- src/riley/zig/scratchresolveglobal_simd.zig | 30 +- 8 files changed, 395 insertions(+), 18 deletions(-) diff --git a/src/demo_psf.zig b/src/demo_psf.zig index 821740b0..cd58e1f0 100644 --- a/src/demo_psf.zig +++ b/src/demo_psf.zig @@ -20,6 +20,7 @@ const sceneops = @import("riley/zig/sceneops.zig"); const Rotation = @import("riley/zig/rotation.zig").Rotation; const F = buildconfig.F; +const raster_threads: u16 = 8; pub fn main(init: std.process.Init) !void { const outer_alloc = init.gpa; @@ -29,8 +30,8 @@ pub fn main(init: std.process.Init) !void { const config_base = riley.RasterConfig{ .save_strategy = .disk, - .total_threads = 4, - .max_raster_workers_per_job = 4, + .total_threads = raster_threads, + .max_raster_workers_per_job = raster_threads, .image_save_opts = &[_]iio.ImageSaveOpts{ .{ .format = .bmp, .bits = 8, .scaling = .auto }, }, @@ -48,7 +49,10 @@ pub fn main(init: std.process.Init) !void { const out_dir_root = "./out/demo-psf"; const pixel_num = [_]u32{ 800, 500 }; - std.debug.print("Loading sphere simulation data from {s}...\n", .{data_dir}); + std.debug.print( + "Loading sphere simulation data from {s} with {d} raster threads...\n", + .{ data_dir, raster_threads }, + ); const sim_data = try meshio.loadSimData( aa, io, diff --git a/src/riley/pydemos/demo_psf.py b/src/riley/pydemos/demo_psf.py index d7e9fd7f..7819d88d 100644 --- a/src/riley/pydemos/demo_psf.py +++ b/src/riley/pydemos/demo_psf.py @@ -15,6 +15,9 @@ from riley.pydemos.common import make_demo_out_dir +RASTER_THREADS = 8 + + def main() -> None: data_dir = riley.data.sphere200_case_path() texture_path = riley.data.speckle_texture_path() @@ -69,11 +72,12 @@ def main() -> None: out_dir.mkdir(parents=True, exist_ok=True) config = riley.create_raster_config( num_frames=1, - total_threads=4, + total_threads=RASTER_THREADS, save_strategy=riley.SaveStrategy.disk, ) config.buffer_mode = mode + print(f"Rendering {mode.name} with {RASTER_THREADS} raster threads...") start_time = perf_counter() image_array = riley.raster(mesh, camera, config, out_dir=str(out_dir)) elapsed_time = perf_counter() - start_time diff --git a/src/riley/zig/report.zig b/src/riley/zig/report.zig index 74cf0187..72fcd052 100644 --- a/src/riley/zig/report.zig +++ b/src/riley/zig/report.zig @@ -62,6 +62,8 @@ pub const FrameTimes = struct { raster_loop: F = 0, raster_workers_requested: u16 = 0, raster_workers_used: u16 = 0, + resolve_workers_requested: u16 = 0, + resolve_workers_used: u16 = 0, cam_invert: F = 0, elem_loop: F = 0, scratch_resolve: F = 0, @@ -2044,6 +2046,14 @@ fn globalSubpxStandardReport( stats.tile_scratch_subpx, stats.tile_scratch_subpx, }); + try writer.print("Raster Workers (Req / Used) = {d} / {d}\n", .{ + frame_times.raster_workers_requested, + frame_times.raster_workers_used, + }); + try writer.print("Resolve Workers (Req / Used) = {d} / {d}\n", .{ + frame_times.resolve_workers_requested, + frame_times.resolve_workers_used, + }); try writer.print("Tile Grid / Active / Empty = {d} / {d} / {d}\n", .{ stats.tile_grid_count, stats.active_tile_count, diff --git a/src/riley/zig/riley.zig b/src/riley/zig/riley.zig index 42524c37..eabf09e8 100644 --- a/src/riley/zig/riley.zig +++ b/src/riley/zig/riley.zig @@ -1573,6 +1573,7 @@ fn rasterFrame( const ctx_report = report.ReportContext(report_mode){ .log = report_ptr }; const time_start_loop = Timestamp.now(io, .awake); ctx.frame_times.raster_workers_requested = raster_workers; + ctx.frame_times.resolve_workers_requested = raster_workers; const ctx_rast = rops.RasterContext{ .camera = input.camera, @@ -1665,12 +1666,16 @@ fn rasterFrame( time_start_tile_raster.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, ); const time_start_resolve = Timestamp.now(io, .awake); - scratchresolveglobal.resolve( + const resolve_workers_used = try scratchresolveglobal.resolve( + outer_alloc, + io, &target, input.camera, input.config.background_value, &ctx.frame_arr, + raster_workers, ); + ctx.frame_times.resolve_workers_used = @intCast(resolve_workers_used); global_resolve_time_ns = @floatFromInt( time_start_resolve.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, ); @@ -1791,13 +1796,20 @@ fn rasterFrame( time_start_tile_raster.durationTo(Timestamp.now(io, .awake)).raw.nanoseconds, ); const time_start_resolve = Timestamp.now(io, .awake); - scratchresolveglobal.resolveRows( + const resolve_workers_used = try scratchresolveglobal.resolveRows( + outer_alloc, + io, &stripe.target, input.camera, input.config.background_value, &ctx.frame_arr, core_suby_min / sub_samp, core_suby_max / sub_samp, + raster_workers, + ); + ctx.frame_times.resolve_workers_used = @max( + ctx.frame_times.resolve_workers_used, + @as(u16, @intCast(resolve_workers_used)), ); const time_end_resolve = Timestamp.now(io, .awake); global_resolve_time_ns += @floatFromInt( diff --git a/src/riley/zig/scratchresolveglobal.zig b/src/riley/zig/scratchresolveglobal.zig index 005465b4..8ab6c7ca 100644 --- a/src/riley/zig/scratchresolveglobal.zig +++ b/src/riley/zig/scratchresolveglobal.zig @@ -7,6 +7,7 @@ // Authors: scepticalrabbit (Lloyd Fletcher) // -------------------------------------------------------------------------------------- const cfg = @import("buildconfig.zig").config; +const std = @import("std"); const cam = @import("camera.zig"); const ndarray = @import("ndarray.zig"); const buildconfig = @import("buildconfig.zig"); @@ -18,28 +19,45 @@ else const subpxframe = @import("subpxframe.zig"); pub fn resolve( + outer_alloc: std.mem.Allocator, + io: std.Io, target: *const subpxframe.SubpxTarget, camera: *const cam.CameraPrepared, background_value: F, image_out_arr: *ndarray.NDArray(F), -) void { - impl.resolve(target, camera, background_value, image_out_arr); + requested_workers: u16, +) !usize { + return impl.resolve( + outer_alloc, + io, + target, + camera, + background_value, + image_out_arr, + requested_workers, + ); } pub fn resolveRows( + outer_alloc: std.mem.Allocator, + io: std.Io, target: *const subpxframe.SubpxTarget, camera: *const cam.CameraPrepared, background_value: F, image_out_arr: *ndarray.NDArray(F), image_y_min: usize, image_y_max: usize, -) void { - impl.resolveRows( + requested_workers: u16, +) !usize { + return impl.resolveRows( + outer_alloc, + io, target, camera, background_value, image_out_arr, image_y_min, image_y_max, + requested_workers, ); } diff --git a/src/riley/zig/scratchresolveglobal_common.zig b/src/riley/zig/scratchresolveglobal_common.zig index dc484a13..9afb34ee 100644 --- a/src/riley/zig/scratchresolveglobal_common.zig +++ b/src/riley/zig/scratchresolveglobal_common.zig @@ -12,6 +12,10 @@ const F = buildconfig.F; const cam = @import("camera.zig"); const ndarray = @import("ndarray.zig"); const subpxframe = @import("subpxframe.zig"); +const pce = @import("parachunkexec.zig"); + +const S = buildconfig.SimdWidth; +const VecSF = buildconfig.VecSF; // -------------------------------------------------------------------------------------- // Public Entry-Point Func @@ -78,6 +82,287 @@ pub fn resolveRows( } } +/// Resolve a global target using independent output-row bands. The direct +/// implementation remains the scalar reference for identity and non-separable +/// PSFs. Separable PSFs use a compact horizontal intermediate at pixel x +/// resolution, then a vertical pass; this fuses the SSAA box sum into each +/// one-dimensional pass and avoids the former SSAA^2 x Kx x Ky stencil. +pub fn resolveParallel( + comptime use_simd: bool, + outer_alloc: std.mem.Allocator, + io: std.Io, + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, + requested_workers: u16, +) !usize { + if (image_y_min == image_y_max) return 0; + return switch (camera.prep_psf.mode) { + .separable => resolveSeparableParallel( + use_simd, + outer_alloc, + io, + target, + camera, + image_out_arr, + image_y_min, + image_y_max, + requested_workers, + ), + .identity_fast, .nonseparable => resolveDirectParallel( + io, + target, + camera, + background_value, + image_out_arr, + image_y_min, + image_y_max, + requested_workers, + ), + }; +} + +fn workersForRows(requested_workers: u16, rows: usize) usize { + return @min( + @max(@as(usize, 1), @as(usize, requested_workers)), + @max(@as(usize, 1), rows), + ); +} + +fn resolveDirectParallel( + io: std.Io, + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, + requested_workers: u16, +) !usize { + const workers_num = workersForRows(requested_workers, image_y_max - image_y_min); + const Ctx = struct { + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + background_value: F, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + }; + const Adapter = struct { + fn run(ctx_ptr: *anyopaque, _: usize, range_start: usize, range_end: usize) void { + const ctx: *Ctx = @ptrCast(@alignCast(ctx_ptr)); + // This is intentionally the unchanged direct scalar oracle. Each + // task owns complete output rows, so no accumulation is shared. + resolveRows( + ctx.target, + ctx.camera, + ctx.background_value, + ctx.image_out_arr, + ctx.image_y_min + range_start, + ctx.image_y_min + range_end, + ); + } + }; + var exec = pce.ParaChunkExecutor.init(io, @intCast(workers_num)); + var ctx = Ctx{ + .target = target, + .camera = camera, + .background_value = background_value, + .image_out_arr = image_out_arr, + .image_y_min = image_y_min, + }; + try exec.runStaticRange(&ctx, Adapter.run, image_y_max - image_y_min, 1); + return workers_num; +} + +fn resolveSeparableParallel( + comptime use_simd: bool, + outer_alloc: std.mem.Allocator, + io: std.Io, + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + image_out_arr: *ndarray.NDArray(F), + image_y_min: usize, + image_y_max: usize, + requested_workers: u16, +) !usize { + const sub_samp: usize = @intCast(camera.sub_sample); + const image_w_px = target.domain.image_w_subpx / sub_samp; + const storage_h = target.domain.storage_h_subpx; + const fields_num: usize = target.domain.fields_num; + const horizontal_len = try std.math.mul(usize, fields_num, try std.math.mul(usize, storage_h, image_w_px)); + const horizontal = try outer_alloc.alloc(F, horizontal_len); + defer outer_alloc.free(horizontal); + + const HorizontalCtx = struct { + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + horizontal: []F, + image_w_px: usize, + storage_h: usize, + }; + const HorizontalAdapter = struct { + fn run(ctx_ptr: *anyopaque, _: usize, range_start: usize, range_end: usize) void { + const ctx: *HorizontalCtx = @ptrCast(@alignCast(ctx_ptr)); + horizontalRows(use_simd, ctx.*, range_start, range_end); + } + }; + + const horizontal_workers = workersForRows(requested_workers, storage_h); + var horizontal_exec = pce.ParaChunkExecutor.init(io, @intCast(horizontal_workers)); + var horizontal_ctx = HorizontalCtx{ + .target = target, + .camera = camera, + .horizontal = horizontal, + .image_w_px = image_w_px, + .storage_h = storage_h, + }; + try horizontal_exec.runStaticRange(&horizontal_ctx, HorizontalAdapter.run, storage_h, 1); + + const VerticalCtx = struct { + target: *const subpxframe.SubpxTarget, + camera: *const cam.CameraPrepared, + horizontal: []const F, + image_out_arr: *ndarray.NDArray(F), + image_w_px: usize, + storage_h: usize, + image_y_min: usize, + }; + const VerticalAdapter = struct { + fn run(ctx_ptr: *anyopaque, _: usize, range_start: usize, range_end: usize) void { + const ctx: *VerticalCtx = @ptrCast(@alignCast(ctx_ptr)); + verticalRows( + use_simd, + ctx.*, + ctx.image_y_min + range_start, + ctx.image_y_min + range_end, + ); + } + }; + + const vertical_workers = workersForRows(requested_workers, image_y_max - image_y_min); + var vertical_exec = pce.ParaChunkExecutor.init(io, @intCast(vertical_workers)); + var vertical_ctx = VerticalCtx{ + .target = target, + .camera = camera, + .horizontal = horizontal, + .image_out_arr = image_out_arr, + .image_w_px = image_w_px, + .storage_h = storage_h, + .image_y_min = image_y_min, + }; + try vertical_exec.runStaticRange( + &vertical_ctx, + VerticalAdapter.run, + image_y_max - image_y_min, + 1, + ); + return @min(horizontal_workers, vertical_workers); +} + +fn horizontalRows( + comptime use_simd: bool, + ctx: anytype, + local_y_start: usize, + local_y_end: usize, +) void { + const sub_samp: usize = @intCast(ctx.camera.sub_sample); + const psf = ctx.camera.prep_psf; + const local_core_x: usize = @intCast(-ctx.target.global_subx_min); + const source_row_stride = ctx.target.domain.storage_w_subpx; + const horizontal_field_stride = ctx.storage_h * ctx.image_w_px; + + for (0..ctx.target.domain.fields_num) |ff| { + const source_field_base = ctx.target.image.rowBase(ff); + const horizontal_field_base = ff * horizontal_field_stride; + for (local_y_start..local_y_end) |local_y| { + const source_row = source_field_base + local_y * source_row_stride; + const horizontal_row = horizontal_field_base + local_y * ctx.image_w_px; + var xx: usize = 0; + if (comptime use_simd) { + while (xx + S <= ctx.image_w_px) : (xx += S) { + var sum = @as(VecSF, @splat(0.0)); + for (0..sub_samp) |sample_x| { + for (psf.weights_x, 0..) |weight, kk| { + var values: [S]F = undefined; + for (0..S) |lane| { + const source_x = local_core_x + + (xx + lane) * sub_samp + sample_x + kk - psf.radius_x_subpx; + values[lane] = ctx.target.image.slice[source_row + source_x]; + } + sum += @as(VecSF, values) * @as(VecSF, @splat(weight)); + } + } + const out_ptr: *[S]F = @ptrCast(&ctx.horizontal[horizontal_row + xx]); + out_ptr.* = @bitCast(sum); + } + } + while (xx < ctx.image_w_px) : (xx += 1) { + var sum: F = 0.0; + for (0..sub_samp) |sample_x| { + for (psf.weights_x, 0..) |weight, kk| { + const source_x = local_core_x + xx * sub_samp + sample_x + kk - psf.radius_x_subpx; + sum += weight * ctx.target.image.slice[source_row + source_x]; + } + } + ctx.horizontal[horizontal_row + xx] = sum; + } + } + } +} + +fn verticalRows( + comptime use_simd: bool, + ctx: anytype, + image_y_start: usize, + image_y_end: usize, +) void { + const sub_samp: usize = @intCast(ctx.camera.sub_sample); + const psf = ctx.camera.prep_psf; + const horizontal_field_stride = ctx.storage_h * ctx.image_w_px; + const inv_sub_samp_sq = 1.0 / @as(F, @floatFromInt(sub_samp * sub_samp)); + + for (0..ctx.target.domain.fields_num) |ff| { + const horizontal_field_base = ff * horizontal_field_stride; + for (image_y_start..image_y_end) |image_y| { + const global_suby: i32 = @intCast(image_y * sub_samp); + const local_core_y: usize = @intCast(global_suby - ctx.target.global_suby_min); + const output_row = ctx.image_out_arr.offset3(ff, image_y, 0); + var xx: usize = 0; + if (comptime use_simd) { + while (xx + S <= ctx.image_w_px) : (xx += S) { + var sum = @as(VecSF, @splat(0.0)); + for (0..sub_samp) |sample_y| { + for (psf.weights_y, 0..) |weight, kk| { + const source_y = local_core_y + sample_y + kk - psf.radius_y_subpx; + const source_ptr: *const [S]F = @ptrCast( + &ctx.horizontal[horizontal_field_base + source_y * ctx.image_w_px + xx], + ); + sum += @as(VecSF, source_ptr.*) * @as(VecSF, @splat(weight)); + } + } + const output_ptr: *[S]F = @ptrCast(&ctx.image_out_arr.slice[output_row + xx]); + output_ptr.* = @bitCast(sum * @as(VecSF, @splat(inv_sub_samp_sq))); + } + } + while (xx < ctx.image_w_px) : (xx += 1) { + var sum: F = 0.0; + for (0..sub_samp) |sample_y| { + for (psf.weights_y, 0..) |weight, kk| { + const source_y = local_core_y + sample_y + kk - psf.radius_y_subpx; + sum += weight * ctx.horizontal[ + horizontal_field_base + source_y * ctx.image_w_px + xx + ]; + } + } + ctx.image_out_arr.slice[output_row + xx] = sum * inv_sub_samp_sq; + } + } + } +} + // -------------------------------------------------------------------------------------- // Private Func // -------------------------------------------------------------------------------------- diff --git a/src/riley/zig/scratchresolveglobal_scalar.zig b/src/riley/zig/scratchresolveglobal_scalar.zig index bd949734..9d5ec447 100644 --- a/src/riley/zig/scratchresolveglobal_scalar.zig +++ b/src/riley/zig/scratchresolveglobal_scalar.zig @@ -14,28 +14,50 @@ const common = @import("scratchresolveglobal_common.zig"); const subpxframe = @import("subpxframe.zig"); pub fn resolve( + outer_alloc: std.mem.Allocator, + io: std.Io, target: *const subpxframe.SubpxTarget, camera: *const cam.CameraPrepared, background_value: F, image_out_arr: *ndarray.NDArray(F), -) void { - common.resolve(target, camera, background_value, image_out_arr); + requested_workers: u16, +) !usize { + return common.resolveParallel( + false, + outer_alloc, + io, + target, + camera, + background_value, + image_out_arr, + 0, + target.domain.image_h_subpx / @as(usize, camera.sub_sample), + requested_workers, + ); } pub fn resolveRows( + outer_alloc: std.mem.Allocator, + io: std.Io, target: *const subpxframe.SubpxTarget, camera: *const cam.CameraPrepared, background_value: F, image_out_arr: *ndarray.NDArray(F), image_y_min: usize, image_y_max: usize, -) void { - common.resolveRows( + requested_workers: u16, +) !usize { + return common.resolveParallel( + false, + outer_alloc, + io, target, camera, background_value, image_out_arr, image_y_min, image_y_max, + requested_workers, ); } +const std = @import("std"); diff --git a/src/riley/zig/scratchresolveglobal_simd.zig b/src/riley/zig/scratchresolveglobal_simd.zig index bd949734..bef9e5a9 100644 --- a/src/riley/zig/scratchresolveglobal_simd.zig +++ b/src/riley/zig/scratchresolveglobal_simd.zig @@ -14,28 +14,50 @@ const common = @import("scratchresolveglobal_common.zig"); const subpxframe = @import("subpxframe.zig"); pub fn resolve( + outer_alloc: std.mem.Allocator, + io: std.Io, target: *const subpxframe.SubpxTarget, camera: *const cam.CameraPrepared, background_value: F, image_out_arr: *ndarray.NDArray(F), -) void { - common.resolve(target, camera, background_value, image_out_arr); + requested_workers: u16, +) !usize { + return common.resolveParallel( + true, + outer_alloc, + io, + target, + camera, + background_value, + image_out_arr, + 0, + target.domain.image_h_subpx / @as(usize, camera.sub_sample), + requested_workers, + ); } pub fn resolveRows( + outer_alloc: std.mem.Allocator, + io: std.Io, target: *const subpxframe.SubpxTarget, camera: *const cam.CameraPrepared, background_value: F, image_out_arr: *ndarray.NDArray(F), image_y_min: usize, image_y_max: usize, -) void { - common.resolveRows( + requested_workers: u16, +) !usize { + return common.resolveParallel( + true, + outer_alloc, + io, target, camera, background_value, image_out_arr, image_y_min, image_y_max, + requested_workers, ); } +const std = @import("std"); From 53665831399be56458a7a43f3573ab0a3aa780ea Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Tue, 4 Aug 2026 13:49:57 +0100 Subject: [PATCH 08/38] Removed timing noise from reporting block --- src/riley/cyth/riley.h | 6 ++++++ src/riley/cyth/riley.pxd | 6 ++++++ src/riley/cyth/riley.py | 20 ++++++++++++++++++++ src/riley/pytests/test_riley.py | 18 ++++++++++++++++++ src/riley/zig/c-riley.zig | 32 ++++++++++++++++++++++++++++++++ src/riley/zig/report.zig | 18 +++++------------- 6 files changed, 87 insertions(+), 13 deletions(-) diff --git a/src/riley/cyth/riley.h b/src/riley/cyth/riley.h index 02c284e4..cc75bae5 100644 --- a/src/riley/cyth/riley.h +++ b/src/riley/cyth/riley.h @@ -239,6 +239,12 @@ typedef struct c_raster_config { double background_value; uint8_t disk_save_overlap; uint16_t tile_size_override; + uint16_t global_subpx_tile_size_min; + uint16_t global_subpx_tile_size_max; + uint16_t global_subpx_tile_size_override; + uint16_t global_subpx_stripe_size_min; + uint16_t global_subpx_stripe_size_max; + uint16_t global_subpx_stripe_size_override; size_t save_frame_buff_count; uint32_t save_format; uint32_t save_bits; diff --git a/src/riley/cyth/riley.pxd b/src/riley/cyth/riley.pxd index 2dd0f436..bba85121 100644 --- a/src/riley/cyth/riley.pxd +++ b/src/riley/cyth/riley.pxd @@ -223,6 +223,12 @@ cdef extern from "riley.h": double background_value uint8_t disk_save_overlap uint16_t tile_size_override + uint16_t global_subpx_tile_size_min + uint16_t global_subpx_tile_size_max + uint16_t global_subpx_tile_size_override + uint16_t global_subpx_stripe_size_min + uint16_t global_subpx_stripe_size_max + uint16_t global_subpx_stripe_size_override size_t save_frame_buff_count uint32_t save_format uint32_t save_bits diff --git a/src/riley/cyth/riley.py b/src/riley/cyth/riley.py index 3e0c879a..d82beb7e 100644 --- a/src/riley/cyth/riley.py +++ b/src/riley/cyth/riley.py @@ -174,6 +174,12 @@ class RasterConfig: background_value: float = 0.0 disk_save_overlap: bool = False tile_size_override: int = 0 + global_subpx_tile_size_min: int = 64 + global_subpx_tile_size_max: int = 1024 + global_subpx_tile_size_override: int = 0 + global_subpx_stripe_size_min: int = 256 + global_subpx_stripe_size_max: int = 4096 + global_subpx_stripe_size_override: int = 0 save_frame_buffer_count: int = 3 save_format: int = 3 save_bits: int = 8 @@ -503,6 +509,20 @@ def _make_raster_config(config: Any) -> cr.CRasterConfig: config_out.background_value = float(config.background_value) config_out.disk_save_overlap = 1 if config.disk_save_overlap else 0 config_out.tile_size_override = int(config.tile_size_override) + config_out.global_subpx_tile_size_min = int(config.global_subpx_tile_size_min) + config_out.global_subpx_tile_size_max = int(config.global_subpx_tile_size_max) + config_out.global_subpx_tile_size_override = int( + config.global_subpx_tile_size_override, + ) + config_out.global_subpx_stripe_size_min = int( + config.global_subpx_stripe_size_min, + ) + config_out.global_subpx_stripe_size_max = int( + config.global_subpx_stripe_size_max, + ) + config_out.global_subpx_stripe_size_override = int( + config.global_subpx_stripe_size_override, + ) config_out.save_frame_buff_count = int(config.save_frame_buffer_count) config_out.save_format = int(config.save_format) config_out.save_bits = int(config.save_bits) diff --git a/src/riley/pytests/test_riley.py b/src/riley/pytests/test_riley.py index 1ee8dbc1..4cff22e6 100644 --- a/src/riley/pytests/test_riley.py +++ b/src/riley/pytests/test_riley.py @@ -74,6 +74,24 @@ ) +def test_raster_config_exposes_global_subpixel_sizing() -> None: + """Python callers can tune both global accumulation tile dimensions.""" + import riley + + config = riley.RasterConfig() + assert config.global_subpx_tile_size_min == 64 + assert config.global_subpx_tile_size_max == 1024 + assert config.global_subpx_tile_size_override == 0 + assert config.global_subpx_stripe_size_min == 256 + assert config.global_subpx_stripe_size_max == 4096 + assert config.global_subpx_stripe_size_override == 0 + + config.global_subpx_tile_size_override = 128 + config.global_subpx_stripe_size_override = 512 + assert config.global_subpx_tile_size_override == 128 + assert config.global_subpx_stripe_size_override == 512 + + def _repo_assets_available() -> bool: required_paths = ( PROJECT_ROOT / "src/run_all_demos.zig", diff --git a/src/riley/zig/c-riley.zig b/src/riley/zig/c-riley.zig index 9789f0c6..084eda30 100644 --- a/src/riley/zig/c-riley.zig +++ b/src/riley/zig/c-riley.zig @@ -286,6 +286,12 @@ pub const CRasterConfig = extern struct { background_value: F, disk_save_overlap: u8, tile_size_override: u16, + global_subpx_tile_size_min: u16, + global_subpx_tile_size_max: u16, + global_subpx_tile_size_override: u16, + global_subpx_stripe_size_min: u16, + global_subpx_stripe_size_max: u16, + global_subpx_stripe_size_override: u16, save_frame_buff_count: usize, save_format: u32, save_bits: u32, @@ -1524,6 +1530,32 @@ fn buildRasterConfig( null else in_config.tile_size_override; + config.global_subpx_tile_size_min = if (in_config.global_subpx_tile_size_min == 0) + config.global_subpx_tile_size_min + else + in_config.global_subpx_tile_size_min; + config.global_subpx_tile_size_max = if (in_config.global_subpx_tile_size_max == 0) + config.global_subpx_tile_size_max + else + in_config.global_subpx_tile_size_max; + config.global_subpx_tile_size_override = + if (in_config.global_subpx_tile_size_override == 0) + null + else + in_config.global_subpx_tile_size_override; + config.global_subpx_stripe_size_min = if (in_config.global_subpx_stripe_size_min == 0) + config.global_subpx_stripe_size_min + else + in_config.global_subpx_stripe_size_min; + config.global_subpx_stripe_size_max = if (in_config.global_subpx_stripe_size_max == 0) + config.global_subpx_stripe_size_max + else + in_config.global_subpx_stripe_size_max; + config.global_subpx_stripe_size_override = + if (in_config.global_subpx_stripe_size_override == 0) + null + else + in_config.global_subpx_stripe_size_override; if (in_config.save_frame_buff_count != 0) { config.save_frame_buff_count = in_config.save_frame_buff_count; } diff --git a/src/riley/zig/report.zig b/src/riley/zig/report.zig index 72fcd052..70e7e772 100644 --- a/src/riley/zig/report.zig +++ b/src/riley/zig/report.zig @@ -1984,10 +1984,8 @@ fn globalSubpxStandardReport( const empty_tiles = stats.tile_grid_count -| stats.active_tile_count; const buffer_planning = frame_times.tile_overlap + frame_times.global_subpx_times.buffer_setup; - const global_stage = rasterStageTime(frame_times); const raster_sec = frame_times.global_subpx_times.tile_raster / 1e9; const resolve_sec = frame_times.global_subpx_times.resolve / 1e9; - const stage_sec = global_stage / 1e9; const active_sec = frame_times.active_time / 1e9; const shaded = @as(F, @floatFromInt(bench_log.total_shaded_px)); const shade_rate = if (raster_sec > 0) @@ -2002,10 +2000,6 @@ fn globalSubpxStandardReport( output_px / (resolve_sec * 1e6) else 0.0; - const stage_rate = if (stage_sec > 0) - output_px / (stage_sec * 1e6) - else - 0.0; const active_rate = if (active_sec > 0) output_px / (active_sec * 1e6) else @@ -2084,22 +2078,20 @@ fn globalSubpxStandardReport( } try writer.print("{s}\nWALL-CLOCK TIMINGS\n", .{section_break}); try writer.print("Global Buffer + Planning = {d:.3} ms\n", .{buffer_planning * conv}); - try writer.print("Tile Raster = {d:.3} ms\n", .{ + try writer.print("Global Tile Raster = {d:.3} ms\n", .{ frame_times.global_subpx_times.tile_raster * conv, }); try writer.print("Global Resolve = {d:.3} ms\n", .{ frame_times.global_subpx_times.resolve * conv, }); - try writer.print("Global Raster Stage = {d:.3} ms\n", .{global_stage * conv}); try writer.print("Save Frame = {d:.3} ms\n", .{frame_times.save_frame * conv}); try writer.print("Active Frame = {d:.3} ms\n", .{frame_times.active_time * conv}); try writer.print("Frame Latency = {d:.3} ms\n", .{frame_times.latency_time * conv}); try writer.print("{s}\nRATES\n", .{section_break}); - try writer.print("Executed Shade Rate = {d:.2} Msubpx/s\n", .{shade_rate}); - try writer.print("Output Sample Rate = {d:.2} Msubpx/s\n", .{sample_rate}); - try writer.print("Global Resolve Rate = {d:.2} MPx/s\n", .{resolve_rate}); - try writer.print("Global Raster Stage Rate = {d:.2} MPx/s\n", .{stage_rate}); - try writer.print("Active Frame Rate = {d:.2} MPx/s\n", .{active_rate}); + try writer.print("Executed Shade Rate = {d:.3} Msubpx/s\n", .{shade_rate}); + try writer.print("Output Sample Rate = {d:.3} Msubpx/s\n", .{sample_rate}); + try writer.print("Global Resolve Rate = {d:.3} MPx/s\n", .{resolve_rate}); + try writer.print("Active Frame Rate = {d:.3} MPx/s\n", .{active_rate}); try writer.print("{s}\n", .{section_break}); if (out_dir_path) |path| { try writer.print("Output Frame Path = {s}\n", .{path}); From d7a576e39bde62893344bf4587fb7607c20b7b4f Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Fri, 21 Aug 2026 11:48:36 +0100 Subject: [PATCH 09/38] Added mesh convention update to Riley to start enforcement --- .gitignore | 2 + data/audit_mesh_convention.py | 78 ++ data/cubes/README.md | 9 + data/cubes/hex20/connectivity.csv | 20 + data/cubes/hex20/coords.csv | 81 ++ data/cubes/hex27/connectivity.csv | 27 + data/cubes/hex27/coords.csv | 125 +++ data/cubes/hex8/connectivity.csv | 8 + data/cubes/hex8/coords.csv | 27 + data/cubes/tet10/connectivity.csv | 10 + data/cubes/tet10/coords.csv | 65 ++ data/cubes/tet14/connectivity.csv | 14 + data/cubes/tet14/coords.csv | 125 +++ data/cubes/tet4/connectivity.csv | 4 + data/cubes/tet4/coords.csv | 15 + requirements.txt | 1 - src/riley/__init__.py | 28 +- src/riley/pytests/test_meshconv.py | 179 +++ src/riley/pytests/test_meshtools.py | 35 - src/riley/python/__init__.py | 28 +- src/riley/python/meshconv.py | 1568 +++++++++++++++++++++++++++ src/riley/python/meshtools.py | 497 +-------- 22 files changed, 2410 insertions(+), 536 deletions(-) create mode 100644 data/audit_mesh_convention.py create mode 100644 data/cubes/README.md create mode 100644 data/cubes/hex20/connectivity.csv create mode 100644 data/cubes/hex20/coords.csv create mode 100644 data/cubes/hex27/connectivity.csv create mode 100644 data/cubes/hex27/coords.csv create mode 100644 data/cubes/hex8/connectivity.csv create mode 100644 data/cubes/hex8/coords.csv create mode 100644 data/cubes/tet10/connectivity.csv create mode 100644 data/cubes/tet10/coords.csv create mode 100644 data/cubes/tet14/connectivity.csv create mode 100644 data/cubes/tet14/coords.csv create mode 100644 data/cubes/tet4/connectivity.csv create mode 100644 data/cubes/tet4/coords.csv create mode 100644 src/riley/pytests/test_meshconv.py create mode 100644 src/riley/python/meshconv.py diff --git a/.gitignore b/.gitignore index 7cae8828..90014ef2 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,8 @@ refs/ # Keep the min test suite to ship with the repo !data/min/ !data/min/**/*.csv +!data/cubes/ +!data/cubes/**/*.csv !gold/min/ !gold/min/**/*.fimg !gold/min/**/*.bmp diff --git a/data/audit_mesh_convention.py b/data/audit_mesh_convention.py new file mode 100644 index 00000000..3a4974a6 --- /dev/null +++ b/data/audit_mesh_convention.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +"""Report whether every CSV mesh below ``data`` follows Riley's convention.""" + +from __future__ import annotations + +from pathlib import Path +import sys + +import numpy as np + +from riley.python import meshconv + + +DATA_DIR = Path(__file__).resolve().parent +CONNECT_FILENAMES = ("connect.csv", "connectivity.csv") + + +def main() -> int: + results = [audit_mesh(mesh_dir) for mesh_dir in find_mesh_dirs()] + width = max(len(mesh_name) for status, mesh_name, _ in results) + + print("Riley mesh convention audit") + print() + for status, mesh_name, detail in results: + print(f"{status:<11} {mesh_name:<{width}} {detail}") + + conforms = sum(status == "CONFORMS" for status, _, _ in results) + errors = len(results) - conforms + print() + print(f"Summary: {conforms} conform, {errors} do not ({len(results)} meshes total).") + return 1 if errors else 0 + + +def find_mesh_dirs() -> list[Path]: + return sorted( + { + path.parent + for filename in CONNECT_FILENAMES + for path in DATA_DIR.rglob(filename) + if path.parent.joinpath("coords.csv").is_file() + }, + ) + + +def audit_mesh(mesh_dir: Path) -> tuple[str, str, str]: + mesh_name = mesh_dir.relative_to(DATA_DIR).as_posix() + try: + coords = np.loadtxt(mesh_dir / "coords.csv", delimiter=",", dtype=np.float64) + connect_paths = [mesh_dir / name for name in CONNECT_FILENAMES] + connect_paths = [path for path in connect_paths if path.is_file()] + connect_tables = [np.loadtxt(path, delimiter=",", dtype=np.int64) for path in connect_paths] + if len(connect_tables) == 2 and not np.array_equal(*connect_tables): + raise ValueError("connect.csv and connectivity.csv differ") + + mesh = meshconv.MeshData( + coords=np.atleast_2d(coords), + connect={"connect1": np.atleast_2d(connect_tables[0])}, + mesh_type=_mesh_type_hint(mesh_dir), + ) + report = meshconv.check_mesh_convention(mesh) + except (OSError, ValueError, NotImplementedError) as err: + return "DOES NOT", mesh_name, str(err) + + if report.is_valid: + return "CONFORMS", mesh_name, "" + return "DOES NOT", mesh_name, ", ".join(report.failed_checks) + + +def _mesh_type_hint(mesh_dir: Path) -> str | None: + if mesh_dir.parts[-2] == "FE": + return "volume" + if mesh_dir.name.startswith(("tri", "quad")): + return "surface" + return None + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/data/cubes/README.md b/data/cubes/README.md new file mode 100644 index 00000000..091ce277 --- /dev/null +++ b/data/cubes/README.md @@ -0,0 +1,9 @@ +# Mesh-convention cube fixtures + +These files are small CSV exports of PyVale's 10 mm element-test cubes. +`connectivity.csv` deliberately retains the source Exodus convention: it is +one-based and node-major. Riley mesh-convention tests use these fixtures to +verify normalization to zero-based, row-major connectivity. + +The supported fixtures are `tet4`, `tet10`, `hex8`, `hex20`, and `hex27`. +`tet14` is retained as the explicit unsupported-topology fixture. diff --git a/data/cubes/hex20/connectivity.csv b/data/cubes/hex20/connectivity.csv new file mode 100644 index 00000000..d2bd374d --- /dev/null +++ b/data/cubes/hex20/connectivity.csv @@ -0,0 +1,20 @@ +1,2,4,3,5,6,8,7 +2,21,3,22,6,23,7,24 +3,22,33,45,7,24,35,46 +4,3,34,33,8,7,36,35 +5,6,8,7,52,53,55,54 +6,23,7,24,53,64,54,65 +7,24,35,46,54,65,71,78 +8,7,36,35,55,54,72,71 +9,25,11,27,17,30,19,32 +10,26,37,47,18,31,42,50 +11,27,38,48,19,32,43,51 +12,10,39,37,20,18,44,42 +13,14,16,15,56,57,59,58 +14,28,15,29,57,66,58,67 +15,29,40,49,58,67,73,79 +16,15,41,40,59,58,74,73 +17,30,19,32,60,68,62,70 +18,31,42,50,61,69,75,80 +19,32,43,51,62,70,76,81 +20,18,44,42,63,61,77,75 diff --git a/data/cubes/hex20/coords.csv b/data/cubes/hex20/coords.csv new file mode 100644 index 00000000..a8f61b9f --- /dev/null +++ b/data/cubes/hex20/coords.csv @@ -0,0 +1,81 @@ +0,0,0 +0.0050000000000000001,0,0 +0.0050000000000000001,0.0050000000000000001,0 +0,0.0050000000000000001,0 +0,0,0.0050000000000000001 +0.0050000000000000001,0,0.0050000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0050000000000000001,0.0050000000000000001 +0.0025000000000000001,0,0 +0.0050000000000000001,0.0025000000000000001,0 +0.0025000000000000001,0.0050000000000000001,0 +0,0.0025000000000000001,0 +0,0,0.0025000000000000001 +0.0050000000000000001,0,0.0025000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0025000000000000001 +0,0.0050000000000000001,0.0025000000000000001 +0.0025000000000000001,0,0.0050000000000000001 +0.0050000000000000001,0.0025000000000000001,0.0050000000000000001 +0.0025000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0025000000000000001,0.0050000000000000001 +0.01,0,0 +0.01,0.0050000000000000001,0 +0.01,0,0.0050000000000000001 +0.01,0.0050000000000000001,0.0050000000000000001 +0.0074999999999999997,0,0 +0.01,0.0025000000000000001,0 +0.0074999999999999997,0.0050000000000000001,0 +0.01,0,0.0025000000000000001 +0.01,0.0050000000000000001,0.0025000000000000001 +0.0074999999999999997,0,0.0050000000000000001 +0.01,0.0025000000000000001,0.0050000000000000001 +0.0074999999999999997,0.0050000000000000001,0.0050000000000000001 +0.0050000000000000001,0.01,0 +0,0.01,0 +0.0050000000000000001,0.01,0.0050000000000000001 +0,0.01,0.0050000000000000001 +0.0050000000000000001,0.0074999999999999997,0 +0.0025000000000000001,0.01,0 +0,0.0074999999999999997,0 +0.0050000000000000001,0.01,0.0025000000000000001 +0,0.01,0.0025000000000000001 +0.0050000000000000001,0.0074999999999999997,0.0050000000000000001 +0.0025000000000000001,0.01,0.0050000000000000001 +0,0.0074999999999999997,0.0050000000000000001 +0.01,0.01,0 +0.01,0.01,0.0050000000000000001 +0.01,0.0074999999999999997,0 +0.0074999999999999997,0.01,0 +0.01,0.01,0.0025000000000000001 +0.01,0.0074999999999999997,0.0050000000000000001 +0.0074999999999999997,0.01,0.0050000000000000001 +0,0,0.01 +0.0050000000000000001,0,0.01 +0.0050000000000000001,0.0050000000000000001,0.01 +0,0.0050000000000000001,0.01 +0,0,0.0074999999999999997 +0.0050000000000000001,0,0.0074999999999999997 +0.0050000000000000001,0.0050000000000000001,0.0074999999999999997 +0,0.0050000000000000001,0.0074999999999999997 +0.0025000000000000001,0,0.01 +0.0050000000000000001,0.0025000000000000001,0.01 +0.0025000000000000001,0.0050000000000000001,0.01 +0,0.0025000000000000001,0.01 +0.01,0,0.01 +0.01,0.0050000000000000001,0.01 +0.01,0,0.0074999999999999997 +0.01,0.0050000000000000001,0.0074999999999999997 +0.0074999999999999997,0,0.01 +0.01,0.0025000000000000001,0.01 +0.0074999999999999997,0.0050000000000000001,0.01 +0.0050000000000000001,0.01,0.01 +0,0.01,0.01 +0.0050000000000000001,0.01,0.0074999999999999997 +0,0.01,0.0074999999999999997 +0.0050000000000000001,0.0074999999999999997,0.01 +0.0025000000000000001,0.01,0.01 +0,0.0074999999999999997,0.01 +0.01,0.01,0.01 +0.01,0.01,0.0074999999999999997 +0.01,0.0074999999999999997,0.01 +0.0074999999999999997,0.01,0.01 diff --git a/data/cubes/hex27/connectivity.csv b/data/cubes/hex27/connectivity.csv new file mode 100644 index 00000000..3fce7592 --- /dev/null +++ b/data/cubes/hex27/connectivity.csv @@ -0,0 +1,27 @@ +1,2,4,3,5,6,8,7 +2,28,3,29,6,30,7,31 +3,29,46,64,7,31,48,65 +4,3,47,46,8,7,49,48 +5,6,8,7,76,77,79,78 +6,30,7,31,77,94,78,95 +7,31,48,65,78,95,106,118 +8,7,49,48,79,78,107,106 +9,32,11,34,17,37,19,39 +10,33,50,66,18,38,55,69 +11,34,51,67,19,39,56,70 +12,10,52,50,20,18,57,55 +13,14,16,15,80,81,83,82 +14,35,15,36,81,96,82,97 +15,36,53,68,82,97,108,119 +16,15,54,53,83,82,109,108 +17,37,19,39,84,98,86,100 +18,38,55,69,85,99,110,120 +19,39,56,70,86,100,111,121 +20,18,57,55,87,85,112,110 +27,45,63,75,93,105,117,125 +21,40,58,71,26,44,62,74 +26,44,62,74,92,104,116,124 +25,23,61,59,91,89,115,113 +23,42,59,72,89,102,113,122 +22,41,24,43,88,101,90,103 +24,43,60,73,90,103,114,123 diff --git a/data/cubes/hex27/coords.csv b/data/cubes/hex27/coords.csv new file mode 100644 index 00000000..0fcb825d --- /dev/null +++ b/data/cubes/hex27/coords.csv @@ -0,0 +1,125 @@ +0,0,0 +0.0050000000000000001,0,0 +0.0050000000000000001,0.0050000000000000001,0 +0,0.0050000000000000001,0 +0,0,0.0050000000000000001 +0.0050000000000000001,0,0.0050000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0050000000000000001,0.0050000000000000001 +0.0025000000000000001,0,0 +0.0050000000000000001,0.0025000000000000001,0 +0.0025000000000000001,0.0050000000000000001,0 +0,0.0025000000000000001,0 +0,0,0.0025000000000000001 +0.0050000000000000001,0,0.0025000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0025000000000000001 +0,0.0050000000000000001,0.0025000000000000001 +0.0025000000000000001,0,0.0050000000000000001 +0.0050000000000000001,0.0025000000000000001,0.0050000000000000001 +0.0025000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0025000000000000001,0.0050000000000000001 +0.0025000000000000001,0.0025000000000000001,0 +0.0025000000000000001,0,0.0025000000000000001 +0.0050000000000000001,0.0025000000000000001,0.0025000000000000001 +0.0025000000000000001,0.0050000000000000001,0.0025000000000000001 +0,0.0025000000000000001,0.0025000000000000001 +0.0025000000000000001,0.0025000000000000001,0.0050000000000000001 +0.0025000000000000001,0.0025000000000000001,0.0025000000000000001 +0.01,0,0 +0.01,0.0050000000000000001,0 +0.01,0,0.0050000000000000001 +0.01,0.0050000000000000001,0.0050000000000000001 +0.0074999999999999997,0,0 +0.01,0.0025000000000000001,0 +0.0074999999999999997,0.0050000000000000001,0 +0.01,0,0.0025000000000000001 +0.01,0.0050000000000000001,0.0025000000000000001 +0.0074999999999999997,0,0.0050000000000000001 +0.01,0.0025000000000000001,0.0050000000000000001 +0.0074999999999999997,0.0050000000000000001,0.0050000000000000001 +0.0074999999999999997,0.0025000000000000001,0 +0.0074999999999999997,0,0.0025000000000000001 +0.01,0.0025000000000000001,0.0025000000000000001 +0.0074999999999999997,0.0050000000000000001,0.0025000000000000001 +0.0074999999999999997,0.0025000000000000001,0.0050000000000000001 +0.0074999999999999997,0.0025000000000000001,0.0025000000000000001 +0.0050000000000000001,0.01,0 +0,0.01,0 +0.0050000000000000001,0.01,0.0050000000000000001 +0,0.01,0.0050000000000000001 +0.0050000000000000001,0.0074999999999999997,0 +0.0025000000000000001,0.01,0 +0,0.0074999999999999997,0 +0.0050000000000000001,0.01,0.0025000000000000001 +0,0.01,0.0025000000000000001 +0.0050000000000000001,0.0074999999999999997,0.0050000000000000001 +0.0025000000000000001,0.01,0.0050000000000000001 +0,0.0074999999999999997,0.0050000000000000001 +0.0025000000000000001,0.0074999999999999997,0 +0.0050000000000000001,0.0074999999999999997,0.0025000000000000001 +0.0025000000000000001,0.01,0.0025000000000000001 +0,0.0074999999999999997,0.0025000000000000001 +0.0025000000000000001,0.0074999999999999997,0.0050000000000000001 +0.0025000000000000001,0.0074999999999999997,0.0025000000000000001 +0.01,0.01,0 +0.01,0.01,0.0050000000000000001 +0.01,0.0074999999999999997,0 +0.0074999999999999997,0.01,0 +0.01,0.01,0.0025000000000000001 +0.01,0.0074999999999999997,0.0050000000000000001 +0.0074999999999999997,0.01,0.0050000000000000001 +0.0074999999999999997,0.0074999999999999997,0 +0.01,0.0074999999999999997,0.0025000000000000001 +0.0074999999999999997,0.01,0.0025000000000000001 +0.0074999999999999997,0.0074999999999999997,0.0050000000000000001 +0.0074999999999999997,0.0074999999999999997,0.0025000000000000001 +0,0,0.01 +0.0050000000000000001,0,0.01 +0.0050000000000000001,0.0050000000000000001,0.01 +0,0.0050000000000000001,0.01 +0,0,0.0074999999999999997 +0.0050000000000000001,0,0.0074999999999999997 +0.0050000000000000001,0.0050000000000000001,0.0074999999999999997 +0,0.0050000000000000001,0.0074999999999999997 +0.0025000000000000001,0,0.01 +0.0050000000000000001,0.0025000000000000001,0.01 +0.0025000000000000001,0.0050000000000000001,0.01 +0,0.0025000000000000001,0.01 +0.0025000000000000001,0,0.0074999999999999997 +0.0050000000000000001,0.0025000000000000001,0.0074999999999999997 +0.0025000000000000001,0.0050000000000000001,0.0074999999999999997 +0,0.0025000000000000001,0.0074999999999999997 +0.0025000000000000001,0.0025000000000000001,0.01 +0.0025000000000000001,0.0025000000000000001,0.0074999999999999997 +0.01,0,0.01 +0.01,0.0050000000000000001,0.01 +0.01,0,0.0074999999999999997 +0.01,0.0050000000000000001,0.0074999999999999997 +0.0074999999999999997,0,0.01 +0.01,0.0025000000000000001,0.01 +0.0074999999999999997,0.0050000000000000001,0.01 +0.0074999999999999997,0,0.0074999999999999997 +0.01,0.0025000000000000001,0.0074999999999999997 +0.0074999999999999997,0.0050000000000000001,0.0074999999999999997 +0.0074999999999999997,0.0025000000000000001,0.01 +0.0074999999999999997,0.0025000000000000001,0.0074999999999999997 +0.0050000000000000001,0.01,0.01 +0,0.01,0.01 +0.0050000000000000001,0.01,0.0074999999999999997 +0,0.01,0.0074999999999999997 +0.0050000000000000001,0.0074999999999999997,0.01 +0.0025000000000000001,0.01,0.01 +0,0.0074999999999999997,0.01 +0.0050000000000000001,0.0074999999999999997,0.0074999999999999997 +0.0025000000000000001,0.01,0.0074999999999999997 +0,0.0074999999999999997,0.0074999999999999997 +0.0025000000000000001,0.0074999999999999997,0.01 +0.0025000000000000001,0.0074999999999999997,0.0074999999999999997 +0.01,0.01,0.01 +0.01,0.01,0.0074999999999999997 +0.01,0.0074999999999999997,0.01 +0.0074999999999999997,0.01,0.01 +0.01,0.0074999999999999997,0.0074999999999999997 +0.0074999999999999997,0.01,0.0074999999999999997 +0.0074999999999999997,0.0074999999999999997,0.01 +0.0074999999999999997,0.0074999999999999997,0.0074999999999999997 diff --git a/data/cubes/hex8/connectivity.csv b/data/cubes/hex8/connectivity.csv new file mode 100644 index 00000000..b937592d --- /dev/null +++ b/data/cubes/hex8/connectivity.csv @@ -0,0 +1,8 @@ +1,2,4,3,5,6,8,7 +2,9,3,10,6,11,7,12 +3,10,13,17,7,12,15,18 +4,3,14,13,8,7,16,15 +5,6,8,7,19,20,22,21 +6,11,7,12,20,23,21,24 +7,12,15,18,21,24,25,27 +8,7,16,15,22,21,26,25 diff --git a/data/cubes/hex8/coords.csv b/data/cubes/hex8/coords.csv new file mode 100644 index 00000000..0317ada8 --- /dev/null +++ b/data/cubes/hex8/coords.csv @@ -0,0 +1,27 @@ +0,0,0 +0.0050000000000000001,0,0 +0.0050000000000000001,0.0050000000000000001,0 +0,0.0050000000000000001,0 +0,0,0.0050000000000000001 +0.0050000000000000001,0,0.0050000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0050000000000000001,0.0050000000000000001 +0.01,0,0 +0.01,0.0050000000000000001,0 +0.01,0,0.0050000000000000001 +0.01,0.0050000000000000001,0.0050000000000000001 +0.0050000000000000001,0.01,0 +0,0.01,0 +0.0050000000000000001,0.01,0.0050000000000000001 +0,0.01,0.0050000000000000001 +0.01,0.01,0 +0.01,0.01,0.0050000000000000001 +0,0,0.01 +0.0050000000000000001,0,0.01 +0.0050000000000000001,0.0050000000000000001,0.01 +0,0.0050000000000000001,0.01 +0.01,0,0.01 +0.01,0.0050000000000000001,0.01 +0.0050000000000000001,0.01,0.01 +0,0.01,0.01 +0.01,0.01,0.01 diff --git a/data/cubes/tet10/connectivity.csv b/data/cubes/tet10/connectivity.csv new file mode 100644 index 00000000..542f4a11 --- /dev/null +++ b/data/cubes/tet10/connectivity.csv @@ -0,0 +1,10 @@ +1,3,11,15,1,15,24,28,15,11,37,24,11,3,47,37,3,1,28,47,28,24,37,47 +2,2,2,2,20,20,20,20,33,33,33,33,43,43,43,43,53,53,53,53,60,60,60,60 +3,11,15,1,15,24,28,1,11,37,24,15,3,47,37,11,1,28,47,3,24,37,47,28 +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 +5,6,12,16,21,22,25,29,34,35,38,41,44,45,48,51,54,55,57,58,61,62,64,65 +6,12,16,5,22,25,29,21,35,38,41,34,45,48,51,44,55,57,58,54,62,64,65,61 +7,13,17,19,19,26,30,32,17,39,42,26,13,49,52,39,7,32,59,49,30,42,52,59 +8,10,14,18,8,18,27,31,18,14,40,27,14,10,50,40,10,8,31,50,31,27,40,50 +9,9,9,9,23,23,23,23,36,36,36,36,46,46,46,46,56,56,56,56,63,63,63,63 +10,14,18,8,18,27,31,8,14,40,27,18,10,50,40,14,8,31,50,10,27,40,50,31 diff --git a/data/cubes/tet10/coords.csv b/data/cubes/tet10/coords.csv new file mode 100644 index 00000000..c09e8dfc --- /dev/null +++ b/data/cubes/tet10/coords.csv @@ -0,0 +1,65 @@ +0,0,0 +0.0050000000000000001,0.0050000000000000001,0 +0,0.01,0 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.0025000000000000001,0.0025000000000000001,0 +0.0025000000000000001,0.0074999999999999997,0 +0,0.0050000000000000001,0 +0.0025000000000000001,0.0025000000000000001,0.0025000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0025000000000000001 +0.0025000000000000001,0.0074999999999999997,0.0025000000000000001 +0.01,0.01,0 +0.0074999999999999997,0.0074999999999999997,0 +0.0050000000000000001,0.01,0 +0.0074999999999999997,0.0074999999999999997,0.0025000000000000001 +0.01,0,0 +0.0074999999999999997,0.0025000000000000001,0 +0.01,0.0050000000000000001,0 +0.0074999999999999997,0.0025000000000000001,0.0025000000000000001 +0.0050000000000000001,0,0 +0.0050000000000000001,0,0.0050000000000000001 +0.0025000000000000001,0,0.0025000000000000001 +0.0074999999999999997,0,0.0025000000000000001 +0.0050000000000000001,0.0025000000000000001,0.0050000000000000001 +0.01,0,0.01 +0.0074999999999999997,0,0.0074999999999999997 +0.01,0,0.0050000000000000001 +0.0074999999999999997,0.0025000000000000001,0.0074999999999999997 +0,0,0.01 +0.0025000000000000001,0,0.0074999999999999997 +0.0050000000000000001,0,0.01 +0.0025000000000000001,0.0025000000000000001,0.0074999999999999997 +0,0,0.0050000000000000001 +0.01,0.0050000000000000001,0.0050000000000000001 +0.01,0.0025000000000000001,0.0025000000000000001 +0.01,0.0074999999999999997,0.0025000000000000001 +0.0074999999999999997,0.0050000000000000001,0.0050000000000000001 +0.01,0.01,0.01 +0.01,0.0074999999999999997,0.0074999999999999997 +0.01,0.01,0.0050000000000000001 +0.0074999999999999997,0.0074999999999999997,0.0074999999999999997 +0.01,0.0025000000000000001,0.0074999999999999997 +0.01,0.0050000000000000001,0.01 +0.0050000000000000001,0.01,0.0050000000000000001 +0.0074999999999999997,0.01,0.0025000000000000001 +0.0025000000000000001,0.01,0.0025000000000000001 +0.0050000000000000001,0.0074999999999999997,0.0050000000000000001 +0,0.01,0.01 +0.0025000000000000001,0.01,0.0074999999999999997 +0,0.01,0.0050000000000000001 +0.0025000000000000001,0.0074999999999999997,0.0074999999999999997 +0.0074999999999999997,0.01,0.0074999999999999997 +0.0050000000000000001,0.01,0.01 +0,0.0050000000000000001,0.0050000000000000001 +0,0.0074999999999999997,0.0025000000000000001 +0,0.0025000000000000001,0.0025000000000000001 +0.0025000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0025000000000000001,0.0074999999999999997 +0,0.0074999999999999997,0.0074999999999999997 +0,0.0050000000000000001,0.01 +0.0050000000000000001,0.0050000000000000001,0.01 +0.0025000000000000001,0.0025000000000000001,0.01 +0.0074999999999999997,0.0025000000000000001,0.01 +0.0050000000000000001,0.0050000000000000001,0.0074999999999999997 +0.0074999999999999997,0.0074999999999999997,0.01 +0.0025000000000000001,0.0074999999999999997,0.01 diff --git a/data/cubes/tet14/connectivity.csv b/data/cubes/tet14/connectivity.csv new file mode 100644 index 00000000..af12bcd3 --- /dev/null +++ b/data/cubes/tet14/connectivity.csv @@ -0,0 +1,14 @@ +1,3,15,22,1,22,39,46,22,15,63,39,15,3,83,63,3,1,46,83,46,39,63,83 +2,2,2,2,32,32,32,32,56,56,56,56,76,76,76,76,96,96,96,96,112,112,112,112 +3,15,22,1,22,39,46,1,15,63,39,22,3,83,63,15,1,46,83,3,39,63,83,46 +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 +5,6,16,23,33,34,40,47,57,58,64,70,77,78,84,90,97,98,103,106,113,114,119,122 +6,16,23,5,34,40,47,33,58,64,70,57,78,84,90,77,98,103,106,97,114,119,122,113 +7,17,24,29,29,41,48,53,24,65,71,41,17,85,91,65,7,53,107,85,48,71,91,107 +8,10,18,25,8,25,42,49,25,18,66,42,18,10,86,66,10,8,49,86,49,42,66,86 +9,9,9,9,35,35,35,35,59,59,59,59,79,79,79,79,99,99,99,99,115,115,115,115 +10,18,25,8,25,42,49,8,18,66,42,25,10,86,66,18,8,49,86,10,42,66,86,49 +11,19,26,30,36,43,50,54,60,67,72,75,80,87,92,95,100,104,108,111,116,120,123,125 +13,20,27,12,38,44,51,37,62,68,73,61,82,88,93,81,102,105,109,101,118,121,124,117 +14,21,28,31,31,45,52,55,28,69,74,45,21,89,94,69,14,55,110,89,52,74,94,110 +12,13,20,27,37,38,44,51,61,62,68,73,81,82,88,93,101,102,105,109,117,118,121,124 diff --git a/data/cubes/tet14/coords.csv b/data/cubes/tet14/coords.csv new file mode 100644 index 00000000..830629d3 --- /dev/null +++ b/data/cubes/tet14/coords.csv @@ -0,0 +1,125 @@ +0,0,0 +0.0050000000000000001,0.0050000000000000001,0 +0,0.01,0 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.0025000000000000001,0.0025000000000000001,0 +0.0025000000000000001,0.0074999999999999997,0 +0,0.0050000000000000001,0 +0.0025000000000000001,0.0025000000000000001,0.0025000000000000001 +0.0050000000000000001,0.0050000000000000001,0.0025000000000000001 +0.0025000000000000001,0.0074999999999999997,0.0025000000000000001 +0.0016666666666666668,0.0050000000000000001,0 +0.0033333333333333335,0.0033333333333333335,0.0016666666666666668 +0.0033333333333333335,0.0066666666666666671,0.0016666666666666668 +0.0016666666666666668,0.0050000000000000001,0.0016666666666666668 +0.01,0.01,0 +0.0074999999999999997,0.0074999999999999997,0 +0.0050000000000000001,0.01,0 +0.0074999999999999997,0.0074999999999999997,0.0025000000000000001 +0.0050000000000000001,0.0083333333333333332,0 +0.0066666666666666671,0.0066666666666666671,0.0016666666666666668 +0.0050000000000000001,0.0083333333333333332,0.0016666666666666668 +0.01,0,0 +0.0074999999999999997,0.0025000000000000001,0 +0.01,0.0050000000000000001,0 +0.0074999999999999997,0.0025000000000000001,0.0025000000000000001 +0.0083333333333333332,0.0050000000000000001,0 +0.0066666666666666671,0.0033333333333333335,0.0016666666666666668 +0.0083333333333333332,0.0050000000000000001,0.0016666666666666668 +0.0050000000000000001,0,0 +0.0050000000000000001,0.0016666666666666668,0 +0.0050000000000000001,0.0016666666666666668,0.0016666666666666668 +0.0050000000000000001,0,0.0050000000000000001 +0.0025000000000000001,0,0.0025000000000000001 +0.0074999999999999997,0,0.0025000000000000001 +0.0050000000000000001,0.0025000000000000001,0.0050000000000000001 +0.0050000000000000001,0,0.0016666666666666668 +0.0033333333333333335,0.0016666666666666668,0.0033333333333333335 +0.0066666666666666671,0.0016666666666666668,0.0033333333333333335 +0.01,0,0.01 +0.0074999999999999997,0,0.0074999999999999997 +0.01,0,0.0050000000000000001 +0.0074999999999999997,0.0025000000000000001,0.0074999999999999997 +0.0083333333333333332,0,0.0050000000000000001 +0.0066666666666666671,0.0016666666666666668,0.0066666666666666671 +0.0083333333333333332,0.0016666666666666668,0.0050000000000000001 +0,0,0.01 +0.0025000000000000001,0,0.0074999999999999997 +0.0050000000000000001,0,0.01 +0.0025000000000000001,0.0025000000000000001,0.0074999999999999997 +0.0050000000000000001,0,0.0083333333333333332 +0.0033333333333333335,0.0016666666666666668,0.0066666666666666671 +0.0050000000000000001,0.0016666666666666668,0.0083333333333333332 +0,0,0.0050000000000000001 +0.0016666666666666668,0,0.0050000000000000001 +0.0016666666666666668,0.0016666666666666668,0.0050000000000000001 +0.01,0.0050000000000000001,0.0050000000000000001 +0.01,0.0025000000000000001,0.0025000000000000001 +0.01,0.0074999999999999997,0.0025000000000000001 +0.0074999999999999997,0.0050000000000000001,0.0050000000000000001 +0.01,0.0050000000000000001,0.0016666666666666668 +0.0083333333333333332,0.0033333333333333335,0.0033333333333333335 +0.0083333333333333332,0.0066666666666666671,0.0033333333333333335 +0.01,0.01,0.01 +0.01,0.0074999999999999997,0.0074999999999999997 +0.01,0.01,0.0050000000000000001 +0.0074999999999999997,0.0074999999999999997,0.0074999999999999997 +0.01,0.0083333333333333332,0.0050000000000000001 +0.0083333333333333332,0.0066666666666666671,0.0066666666666666671 +0.0083333333333333332,0.0083333333333333332,0.0050000000000000001 +0.01,0.0025000000000000001,0.0074999999999999997 +0.01,0.0050000000000000001,0.01 +0.01,0.0050000000000000001,0.0083333333333333332 +0.0083333333333333332,0.0033333333333333335,0.0066666666666666671 +0.0083333333333333332,0.0050000000000000001,0.0083333333333333332 +0.01,0.0016666666666666668,0.0050000000000000001 +0.0050000000000000001,0.01,0.0050000000000000001 +0.0074999999999999997,0.01,0.0025000000000000001 +0.0025000000000000001,0.01,0.0025000000000000001 +0.0050000000000000001,0.0074999999999999997,0.0050000000000000001 +0.0050000000000000001,0.01,0.0016666666666666668 +0.0066666666666666671,0.0083333333333333332,0.0033333333333333335 +0.0033333333333333335,0.0083333333333333332,0.0033333333333333335 +0,0.01,0.01 +0.0025000000000000001,0.01,0.0074999999999999997 +0,0.01,0.0050000000000000001 +0.0025000000000000001,0.0074999999999999997,0.0074999999999999997 +0.0016666666666666668,0.01,0.0050000000000000001 +0.0033333333333333335,0.0083333333333333332,0.0066666666666666671 +0.0016666666666666668,0.0083333333333333332,0.0050000000000000001 +0.0074999999999999997,0.01,0.0074999999999999997 +0.0050000000000000001,0.01,0.01 +0.0050000000000000001,0.01,0.0083333333333333332 +0.0066666666666666671,0.0083333333333333332,0.0066666666666666671 +0.0050000000000000001,0.0083333333333333332,0.0083333333333333332 +0.0083333333333333332,0.01,0.0050000000000000001 +0,0.0050000000000000001,0.0050000000000000001 +0,0.0074999999999999997,0.0025000000000000001 +0,0.0025000000000000001,0.0025000000000000001 +0.0025000000000000001,0.0050000000000000001,0.0050000000000000001 +0,0.0050000000000000001,0.0016666666666666668 +0.0016666666666666668,0.0066666666666666671,0.0033333333333333335 +0.0016666666666666668,0.0033333333333333335,0.0033333333333333335 +0,0.0025000000000000001,0.0074999999999999997 +0,0.0016666666666666668,0.0050000000000000001 +0.0016666666666666668,0.0033333333333333335,0.0066666666666666671 +0,0.0074999999999999997,0.0074999999999999997 +0,0.0050000000000000001,0.01 +0,0.0050000000000000001,0.0083333333333333332 +0.0016666666666666668,0.0066666666666666671,0.0066666666666666671 +0.0016666666666666668,0.0050000000000000001,0.0083333333333333332 +0,0.0083333333333333332,0.0050000000000000001 +0.0050000000000000001,0.0050000000000000001,0.01 +0.0025000000000000001,0.0025000000000000001,0.01 +0.0074999999999999997,0.0025000000000000001,0.01 +0.0050000000000000001,0.0050000000000000001,0.0074999999999999997 +0.0050000000000000001,0.0016666666666666668,0.01 +0.0033333333333333335,0.0033333333333333335,0.0083333333333333332 +0.0066666666666666671,0.0033333333333333335,0.0083333333333333332 +0.0074999999999999997,0.0074999999999999997,0.01 +0.0083333333333333332,0.0050000000000000001,0.01 +0.0066666666666666671,0.0066666666666666671,0.0083333333333333332 +0.0025000000000000001,0.0074999999999999997,0.01 +0.0050000000000000001,0.0083333333333333332,0.01 +0.0033333333333333335,0.0066666666666666671,0.0083333333333333332 +0.0016666666666666668,0.0050000000000000001,0.01 diff --git a/data/cubes/tet4/connectivity.csv b/data/cubes/tet4/connectivity.csv new file mode 100644 index 00000000..66d4c4f5 --- /dev/null +++ b/data/cubes/tet4/connectivity.csv @@ -0,0 +1,4 @@ +1,3,5,6,1,6,8,9,6,5,11,8,5,3,13,11,3,1,9,13,9,8,11,13 +2,2,2,2,7,7,7,7,10,10,10,10,12,12,12,12,14,14,14,14,15,15,15,15 +3,5,6,1,6,8,9,1,5,11,8,6,3,13,11,5,1,9,13,3,8,11,13,9 +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 diff --git a/data/cubes/tet4/coords.csv b/data/cubes/tet4/coords.csv new file mode 100644 index 00000000..670f2b7d --- /dev/null +++ b/data/cubes/tet4/coords.csv @@ -0,0 +1,15 @@ +0,0,0 +0.0050000000000000001,0.0050000000000000001,0 +0,0.01,0 +0.0050000000000000001,0.0050000000000000001,0.0050000000000000001 +0.01,0.01,0 +0.01,0,0 +0.0050000000000000001,0,0.0050000000000000001 +0.01,0,0.01 +0,0,0.01 +0.01,0.0050000000000000001,0.0050000000000000001 +0.01,0.01,0.01 +0.0050000000000000001,0.01,0.0050000000000000001 +0,0.01,0.01 +0,0.0050000000000000001,0.0050000000000000001 +0.0050000000000000001,0.0050000000000000001,0.01 diff --git a/requirements.txt b/requirements.txt index ef14b81a..a14e94cf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -41,7 +41,6 @@ PyQt6_sip==13.10.2 pytest==8.4.0 python-dateutil==2.9.0.post0 pytz==2025.2 --e git+ssh://git@github.com/Computer-Aided-Validation-Laboratory/pyvale.git@acf8b92b911306fc1c7d0b73c3677361d68310bb#egg=pyvale pyvista==0.45.2 PyYAML==6.0.2 requests==2.32.3 diff --git a/src/riley/__init__.py b/src/riley/__init__.py index e025b604..febd5234 100644 --- a/src/riley/__init__.py +++ b/src/riley/__init__.py @@ -82,9 +82,21 @@ load_field_csvs, load_sim_csvs, ) -from riley.python.meshtools import ( +from riley.python.meshconv import ( + MeshConventionCheck, + MeshData, + check_ccw_winding, + check_cw_winding, + check_mesh_convention, + enforce_ccw_winding, + enforce_cw_winding, enforce_mesh_convention, - extract_surface_mesh, + extract_surf_between, + extract_surf_mesh, + is_mesh_2d, + is_volume_mesh, +) +from riley.python.meshtools import ( project_uvs_planar_bbox, project_uvs_planar_centered, ) @@ -127,8 +139,18 @@ "TextureSampleMode", "PsfType", "ImageFormat", + "MeshConventionCheck", + "MeshData", + "check_ccw_winding", + "check_cw_winding", + "check_mesh_convention", "enforce_mesh_convention", - "extract_surface_mesh", + "enforce_ccw_winding", + "enforce_cw_winding", + "extract_surf_between", + "extract_surf_mesh", + "is_mesh_2d", + "is_volume_mesh", "load_connect_csv", "load_coord_csv", "load_disp_csvs", diff --git a/src/riley/pytests/test_meshconv.py b/src/riley/pytests/test_meshconv.py new file mode 100644 index 00000000..3859945b --- /dev/null +++ b/src/riley/pytests/test_meshconv.py @@ -0,0 +1,179 @@ +# -------------------------------------------------------------------------- +# Riley: A High Performance Rasteriser for DIC UQ +# +# Copyright (c) 2025-2026 scepticalrabbit (Lloyd Fletcher) +# Licensed under the MIT License (see LICENSE file for details) +# +# Authors: scepticalrabbit (Lloyd Fletcher) +# -------------------------------------------------------------------------- +from __future__ import annotations + +from pathlib import Path + +import numpy as np +import pytest + +from riley.python import meshconv + + +DATA_DIR = Path(__file__).resolve().parents[3] / "data" +SUPPORTED_CUBES = ("tet4", "tet10", "hex8", "hex20", "hex27") +SPHERE_MESHES = ( + "tri3_sphere200", + "tri6_sphere200", + "quad4newton_sphere200", + "quad8_sphere200", + "quad9_sphere200", +) + + +def test_check_mesh_convention_passes_for_canonical_quad() -> None: + mesh = meshconv.MeshData( + coords=_quad_coords(), + connect={"connect1": np.array(((0, 1, 2, 3),), dtype=np.int64)}, + num_spat_dims=2, + ) + + report = meshconv.check_mesh_convention(mesh) + + assert report.is_valid + assert report.connectivity_failures["connect1"] == tuple() + + +def test_enforce_mesh_convention_corrects_legacy_connectivity() -> None: + mesh = meshconv.MeshData( + coords=_quad_coords(), + connect={"connect1": np.array(((1,), (2,), (3,), (4,)))}, + num_spat_dims=2, + ) + + mesh_out = meshconv.enforce_mesh_convention(mesh) + + assert mesh_out.connect is not None + assert np.array_equal( + mesh_out.connect["connect1"], + np.array(((0, 1, 2, 3),), dtype=np.int64), + ) + assert meshconv.check_mesh_convention(mesh_out).is_valid + + +def test_check_mesh_convention_reports_failed_checks() -> None: + mesh = meshconv.MeshData( + coords=_quad_coords(), + connect={"connect1": np.array(((1,), (4,), (3,), (2,)))}, + num_spat_dims=2, + ) + + report = meshconv.check_mesh_convention(mesh) + + assert not report.is_valid + assert "zero_based_indexing" in report.failed_checks + assert "row_major_connectivity" in report.failed_checks + assert "ccw_winding" in report.failed_checks + + +def test_enforce_mesh_convention_raises_for_invalid_indices() -> None: + mesh = meshconv.MeshData( + coords=_quad_coords(), + connect={"connect1": np.array(((0, 1, 2, 10),), dtype=np.int64)}, + num_spat_dims=2, + ) + + with pytest.raises(ValueError, match="invalid|outside"): + meshconv.enforce_mesh_convention(mesh) + + +def test_enforce_mesh_convention_fixes_tet_handedness() -> None: + mesh = meshconv.MeshData( + coords=np.array( + ((0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)), + dtype=np.float64, + ), + connect={"connect1": np.array(((0, 2, 1, 3),), dtype=np.int64)}, + ) + + mesh_out = meshconv.enforce_mesh_convention(mesh) + + assert meshconv.check_mesh_convention(mesh_out).is_valid + assert np.array_equal( + mesh_out.connect["connect1"], + np.array(((0, 1, 2, 3),), dtype=np.int64), + ) + + +@pytest.mark.parametrize("cube_name", SUPPORTED_CUBES) +def test_cube_mesh_convention_enforcement_is_idempotent(cube_name: str) -> None: + mesh = _load_cube(cube_name) + + raw_report = meshconv.check_mesh_convention(mesh) + enforced_once = meshconv.enforce_mesh_convention(mesh) + enforced_twice = meshconv.enforce_mesh_convention(enforced_once) + + assert not raw_report.is_valid + assert meshconv.check_mesh_convention(enforced_once).is_valid + assert enforced_once.connect is not None + assert enforced_twice.connect is not None + for name, connect in enforced_once.connect.items(): + assert np.array_equal(connect, enforced_twice.connect[name]) + + +def test_tet14_cube_is_explicitly_unsupported() -> None: + with pytest.raises(NotImplementedError, match="supported nodes-per-element"): + meshconv.check_mesh_convention(_load_cube("tet14")) + + +@pytest.mark.parametrize("cube_name", SUPPORTED_CUBES) +def test_extracted_cube_surface_passes_convention_check(cube_name: str) -> None: + surface = meshconv.extract_surf_mesh( + meshconv.enforce_mesh_convention(_load_cube(cube_name)), + ) + + assert meshconv.check_mesh_convention(surface).is_valid + + +@pytest.mark.parametrize("mesh_name", SPHERE_MESHES) +def test_native_sphere_meshes_normalize_to_an_idempotent_convention( + mesh_name: str, +) -> None: + mesh = _load_native_mesh( + DATA_DIR / "min" / mesh_name, + mesh_type="surface", + ) + + mesh_out = meshconv.enforce_mesh_convention(mesh) + mesh_twice = meshconv.enforce_mesh_convention(mesh_out) + + assert meshconv.check_mesh_convention(mesh_out).is_valid + assert np.array_equal(mesh.coords, mesh_out.coords) + assert mesh_out.connect is not None + assert mesh_twice.connect is not None + for name, connect in mesh_out.connect.items(): + assert np.array_equal(connect, mesh_twice.connect[name]) + + +def _quad_coords() -> np.ndarray: + return np.array( + ((0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (1.0, 1.0, 0.0), (0.0, 1.0, 0.0)), + dtype=np.float64, + ) + + +def _load_cube(name: str) -> meshconv.MeshData: + return _load_native_mesh(DATA_DIR / "cubes" / name) + + +def _load_native_mesh( + mesh_dir: Path, + *, + mesh_type: str | None = None, +) -> meshconv.MeshData: + coords = np.loadtxt(mesh_dir / "coords.csv", delimiter=",", dtype=np.float64) + connect_path = mesh_dir / "connectivity.csv" + if not connect_path.is_file(): + connect_path = mesh_dir / "connect.csv" + connect = np.loadtxt(connect_path, delimiter=",", dtype=np.int64) + return meshconv.MeshData( + coords=coords, + connect={"connect1": connect}, + mesh_type=mesh_type, + ) diff --git a/src/riley/pytests/test_meshtools.py b/src/riley/pytests/test_meshtools.py index c6a1ed17..78b26637 100644 --- a/src/riley/pytests/test_meshtools.py +++ b/src/riley/pytests/test_meshtools.py @@ -13,41 +13,6 @@ import riley -def test_enforce_mesh_convention_flips_clockwise_tri3() -> None: - coords = np.array(((0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (0.0, 1.0, 0.0))) - connect = np.array(((0, 2, 1),), dtype=np.uintp) - - _, connect_fixed = riley.enforce_mesh_convention(coords, connect) - - np.testing.assert_array_equal( - connect_fixed, - np.array(((0, 1, 2),), dtype=np.uintp), - ) - - -def test_extract_surface_mesh_hex8_cube() -> None: - coords = np.array( - ( - (0.0, 0.0, 0.0), - (1.0, 0.0, 0.0), - (1.0, 1.0, 0.0), - (0.0, 1.0, 0.0), - (0.0, 0.0, 1.0), - (1.0, 0.0, 1.0), - (1.0, 1.0, 1.0), - (0.0, 1.0, 1.0), - ), - dtype=np.float64, - ) - connect = np.array(((0, 1, 2, 3, 4, 5, 6, 7),), dtype=np.uintp) - - surf_coords, surf_connect = riley.extract_surface_mesh(coords, connect) - - assert surf_coords.shape == (8, 3) - assert surf_connect.shape == (6, 4) - assert np.unique(surf_connect).shape[0] == 8 - - def test_project_uvs_planar_centered_xy() -> None: coords = np.array( ( diff --git a/src/riley/python/__init__.py b/src/riley/python/__init__.py index b0cd357c..94aac692 100644 --- a/src/riley/python/__init__.py +++ b/src/riley/python/__init__.py @@ -12,9 +12,21 @@ load_texture, ) from riley.python.meshio import load_connect_csv, load_coord_csv, load_disp_csvs, load_field_csv, load_field_csvs, load_sim_csvs -from riley.python.meshtools import ( +from riley.python.meshconv import ( + MeshConventionCheck, + MeshData, + check_ccw_winding, + check_cw_winding, + check_mesh_convention, + enforce_ccw_winding, + enforce_cw_winding, enforce_mesh_convention, - extract_surface_mesh, + extract_surf_between, + extract_surf_mesh, + is_mesh_2d, + is_volume_mesh, +) +from riley.python.meshtools import ( project_uvs_planar_bbox, project_uvs_planar_centered, ) @@ -27,8 +39,18 @@ "PlanarProjectionMode", "ProjectionPlane", "create_raster_config", + "MeshConventionCheck", + "MeshData", + "check_ccw_winding", + "check_cw_winding", + "check_mesh_convention", "enforce_mesh_convention", - "extract_surface_mesh", + "enforce_ccw_winding", + "enforce_cw_winding", + "extract_surf_between", + "extract_surf_mesh", + "is_mesh_2d", + "is_volume_mesh", "load_connect_csv", "load_coord_csv", "load_disp_csvs", diff --git a/src/riley/python/meshconv.py b/src/riley/python/meshconv.py new file mode 100644 index 00000000..724615f4 --- /dev/null +++ b/src/riley/python/meshconv.py @@ -0,0 +1,1568 @@ +# ============================================================================== +# pyvale: the python validation engine +# License: MIT +# Copyright (C) 2025 The Computer Aided Validation Team +# ============================================================================== + +"""Riley's dependency-free mesh convention and surface-extraction tools.""" + +from __future__ import annotations + +from dataclasses import dataclass +import numpy as np + + +@dataclass(slots=True) +class MeshData: + """Mesh data used by Riley's mesh-convention tools. + + Connectivity tables may initially use either indexing convention and either + table orientation; :func:`enforce_mesh_convention` canonicalises them. + The optional metadata fields allow external adapters to preserve associated + data without making Riley depend on their data-model types. + """ + + coords: np.ndarray | None = None + connect: dict[str, np.ndarray] | None = None + num_spat_dims: int = 3 + mesh_type: object | None = None + time: np.ndarray | None = None + side_sets: dict[tuple[str, str], np.ndarray] | None = None + node_vars: dict[str, np.ndarray] | None = None + elem_vars: dict[tuple[str, int], np.ndarray] | None = None + glob_vars: dict[str, np.ndarray] | None = None + + def refresh_mesh_type(self) -> None: + if self.coords is None or self.connect is None: + self.mesh_type = None + return + self.mesh_type = "volume" if is_volume_mesh(self) else "surface" + + +# Compatibility for internal function annotations retained from the original +# implementation. This is a Riley-owned type, not PyVale's SimData. +SimData = MeshData + +_SURFACE_NODE_COUNTS = frozenset((3, 4, 6, 7, 8, 9)) +_VOLUME_NODE_COUNTS = frozenset((4, 8, 10, 20, 27)) +_SUPPORTED_NODE_COUNTS = _SURFACE_NODE_COUNTS | _VOLUME_NODE_COUNTS +_TOL = 1.0e-12 +_QUAD8_EDGE_TOL = 5.0e-2 + + +@dataclass(slots=True) +class MeshConventionCheck: + """Structured report describing mesh convention compliance.""" + + is_zero_based: bool + has_ccw_winding: bool + is_right_handed: bool + has_valid_connectivity: bool + has_row_major_connectivity: bool + failed_checks: tuple[str, ...] + connectivity_failures: dict[str, tuple[str, ...]] + + @property + def is_valid(self) -> bool: + return not self.failed_checks + + +def check_mesh_convention(mesh_in: SimData) -> MeshConventionCheck: + """Checks a mesh against the shared pyvale mesh convention.""" + + if mesh_in.connect is None: + return MeshConventionCheck(True, True, True, True, True, tuple(), {}) + if mesh_in.coords is None: + raise ValueError("Mesh convention checks require 'coords' to be set.") + + zero_based = True + ccw = True + right_handed = True + valid_connectivity = True + row_major = True + per_table: dict[str, tuple[str, ...]] = {} + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + surface_only = _mesh_type_is_surface(mesh_in.mesh_type) + + for name, connect_raw in mesh_in.connect.items(): + connect = _coerce_connect_array(connect_raw, name) + failures: list[str] = [] + + if _should_transpose_connectivity(connect, name, mesh_in): + row_major = False + failures.append("row_major_connectivity") + connect = connect.T + + legacy_connect = _table_needs_zero_based_shift( + connect, + mesh_in.coords.shape[0], + shift_all, + ) + if legacy_connect: + zero_based = False + failures.append("zero_based_indexing") + + connect_check = connect + if legacy_connect: + connect_check = connect - 1 + + if not _check_indices_zero_based(connect_check, mesh_in.coords.shape[0]): + valid_connectivity = False + failures.append("connectivity_indices") + else: + connect_check = _normalise_legacy_connectivity_order( + connect_check, legacy_connect + ) + + if not _check_ccw_winding_table( + connect_check, + mesh_in.coords, + surface_only=surface_only, + ): + ccw = False + failures.append("ccw_winding") + + if not _check_right_handed_table( + connect_check, + mesh_in.coords, + surface_only=surface_only, + ): + right_handed = False + failures.append("right_handed_geometry") + + per_table[name] = tuple(failures) + + failed_checks: list[str] = [] + if not zero_based: + failed_checks.append("zero_based_indexing") + if not ccw: + failed_checks.append("ccw_winding") + if not right_handed: + failed_checks.append("right_handed_geometry") + if not valid_connectivity: + failed_checks.append("connectivity_indices") + if not row_major: + failed_checks.append("row_major_connectivity") + + return MeshConventionCheck( + is_zero_based=zero_based, + has_ccw_winding=ccw, + is_right_handed=right_handed, + has_valid_connectivity=valid_connectivity, + has_row_major_connectivity=row_major, + failed_checks=tuple(failed_checks), + connectivity_failures=per_table, + ) + + +def enforce_mesh_convention(mesh_in: SimData) -> SimData: + """Normalises a mesh to the pyvale mesh convention: + - 0-based indexing + - CCW node ordering when viewed from the outward/visible side + - Right-handed geometry conventions + - Check that all indices in the connectivity table map to a row in coords + """ + + report = check_mesh_convention(mesh_in) + if report.is_valid: + return mesh_in + + if mesh_in.connect is None: + return mesh_in + if mesh_in.coords is None: + raise ValueError("Mesh convention enforcement requires coords.") + + connect_out: dict[str, np.ndarray] = {} + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + surface_only = _mesh_type_is_surface(mesh_in.mesh_type) + + for name, connect_raw in mesh_in.connect.items(): + connect = _coerce_connect_array(connect_raw, name) + + if _should_transpose_connectivity(connect, name, mesh_in): + connect = connect.T + + legacy_connect = _table_needs_zero_based_shift( + connect, + mesh_in.coords.shape[0], + shift_all, + ) + if legacy_connect: + connect = connect - 1 + + if not _check_indices_zero_based(connect, mesh_in.coords.shape[0]): + raise ValueError( + "Connectivity table " + f"'{name}' contains indices outside the coordinate array after " + "0-based normalization." + ) + + connect = _normalise_legacy_connectivity_order(connect, legacy_connect) + connect = _enforce_ccw_winding_table( + connect, + mesh_in.coords, + surface_only=surface_only, + ) + connect = _enforce_right_handed_table( + connect, + mesh_in.coords, + surface_only=surface_only, + ) + + if not _check_indices_zero_based(connect, mesh_in.coords.shape[0]): + raise ValueError( + "Connectivity table " + f"'{name}' became invalid during mesh convention enforcement." + ) + + connect_out[name] = np.ascontiguousarray(connect, dtype=np.int64) + + return _copy_sim_data(mesh_in, connect=connect_out) + + +def check_cw_winding(mesh_in: SimData) -> bool: + """Checks whether all supported surface/2D elements are wound clockwise.""" + + if mesh_in.connect is None: + return True + if mesh_in.coords is None: + raise ValueError("Clockwise winding checks require 'coords' to be set.") + + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + for connect in mesh_in.connect.values(): + connect_row_major = _as_row_major_zero_based( + connect, + mesh_in.coords.shape[0], + shift_all=shift_all, + ) + if not _check_cw_winding_table(connect_row_major, mesh_in.coords): + return False + return True + + +def check_ccw_winding(mesh_in: SimData) -> bool: + """Checks whether all supported surface/2D elements are wound counter-clockwise.""" + + if mesh_in.connect is None: + return True + if mesh_in.coords is None: + raise ValueError("CCW winding checks require 'coords' to be set.") + + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + for connect in mesh_in.connect.values(): + connect_row_major = _as_row_major_zero_based( + connect, + mesh_in.coords.shape[0], + shift_all=shift_all, + ) + if not _check_ccw_winding_table(connect_row_major, mesh_in.coords): + return False + return True + + +def enforce_cw_winding(mesh_in: SimData) -> SimData: + """Returns a copy of ``mesh_in`` with supported 2D/surface elements wound CW.""" + + if mesh_in.connect is None: + return mesh_in + if mesh_in.coords is None: + raise ValueError("Clockwise winding enforcement requires 'coords' to be set.") + + connect_out: dict[str, np.ndarray] = {} + changed = False + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + + for name, connect in mesh_in.connect.items(): + connect_row_major = _as_row_major_zero_based( + connect, + mesh_in.coords.shape[0], + shift_all=shift_all, + ) + connect_out[name] = _enforce_cw_winding_table(connect_row_major, mesh_in.coords) + changed = changed or not np.array_equal(connect_out[name], connect_row_major) + + if not changed: + return mesh_in + + return _copy_sim_data(mesh_in, connect=connect_out) + + +def enforce_ccw_winding(mesh_in: SimData) -> SimData: + """Returns a copy of ``mesh_in`` with supported 2D/surface elements wound CCW.""" + + if mesh_in.connect is None: + return mesh_in + if mesh_in.coords is None: + raise ValueError("CCW winding enforcement requires 'coords' to be set.") + + connect_out: dict[str, np.ndarray] = {} + changed = False + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + + for name, connect in mesh_in.connect.items(): + connect_row_major = _as_row_major_zero_based( + connect, + mesh_in.coords.shape[0], + shift_all=shift_all, + ) + connect_out[name] = _enforce_ccw_winding_table(connect_row_major, mesh_in.coords) + changed = changed or not np.array_equal(connect_out[name], connect_row_major) + + if not changed: + return mesh_in + + return _copy_sim_data(mesh_in, connect=connect_out) + + +def is_mesh_2d(mesh_in: SimData) -> bool: + if mesh_in.coords is None or mesh_in.connect is None: + return False + + if is_volume_mesh(mesh_in): + return False + + # 1. Check coordinate flatness + coord_ranges = np.ptp(mesh_in.coords, axis=0) + if np.any(coord_ranges < 1e-12): + return True + + # 2. Check elements in connectivity tables + for name, connect_raw in mesh_in.connect.items(): + connect = np.asarray(connect_raw, dtype=np.int64) + if _should_transpose_connectivity(connect, name, mesh_in): + connect = connect.T + + # Normalize 1-based indexing if present to avoid out-of-bounds errors + shift_all = _infer_mesh_zero_based_shift( + mesh_in, mesh_in.coords.shape[0] + ) + legacy_connect = _table_needs_zero_based_shift( + connect, + mesh_in.coords.shape[0], + shift_all, + ) + if legacy_connect: + connect = connect - 1 + + nodes_per_elem = connect.shape[1] + if nodes_per_elem in (3, 6, 7, 9): + return True + if nodes_per_elem in (10, 20, 27): + return False + + if nodes_per_elem == 4: + # Check if elements are TET4 (3D) or QUAD4 (2D) + try: + num_check = min(10, connect.shape[0]) + is_tet = False + for i in range(num_check): + elem = connect[i] + v = mesh_in.coords[elem] + vol = np.abs( + np.dot( + v[1] - v[0], + np.cross(v[2] - v[0], v[3] - v[0]), + ) + ) + if vol > 1e-10: + is_tet = True + break + if not is_tet: + return True + except IndexError: + pass + + if nodes_per_elem == 8: + # Check if elements are HEX8 (3D) or QUAD8 (2D) + try: + num_check = min(10, connect.shape[0]) + is_hex = False + for i in range(num_check): + elem = connect[i] + v = mesh_in.coords[elem] + vol = np.abs( + np.dot( + v[1] - v[0], + np.cross(v[2] - v[0], v[4] - v[0]), + ) + ) + if vol > 1e-10: + is_hex = True + break + if not is_hex: + return True + except IndexError: + pass + + return False + + +def is_volume_mesh(mesh_in: SimData) -> bool: + """Return whether every connectivity table describes volume elements. + + Element node count usually establishes the topology. Four-node and + eight-node tables are ambiguous (TET4/QUAD4 and HEX8/QUAD8), so they are + classified from their signed cell volume. A mesh containing both surface + and volume tables is rejected because it has no single ``EMeshType``. + """ + if mesh_in.coords is None or mesh_in.connect is None: + return False + + num_coords = mesh_in.coords.shape[0] + shift_all = _infer_mesh_zero_based_shift(mesh_in, num_coords) + table_types: set[bool] = set() + + for name, connect_raw in mesh_in.connect.items(): + connect = _coerce_connect_array(connect_raw, name) + if _should_transpose_connectivity(connect, name, mesh_in): + connect = connect.T + + if _table_needs_zero_based_shift(connect, num_coords, shift_all): + connect = connect - 1 + + if not _check_indices_zero_based(connect, num_coords): + raise ValueError( + f"Connectivity table '{name}' has invalid indices." + ) + + table_types.add(_is_volume_connectivity_table(connect, mesh_in.coords)) + + if len(table_types) > 1: + raise ValueError( + "A SimData mesh cannot mix surface and volume connectivity tables." + ) + + return bool(table_types and table_types.pop()) + + +def _is_volume_connectivity_table( + connect: np.ndarray, + coords: np.ndarray, +) -> bool: + nodes_per_elem = connect.shape[1] + _supported_nodes_per_elem(nodes_per_elem) + + if nodes_per_elem in (10, 20, 27): + return True + if nodes_per_elem in (3, 6, 7, 9): + return False + + if nodes_per_elem == 8: + if all(_is_quad8_surface_row(row, coords) for row in connect): + return False + + for row in connect: + corner_inds = _get_volume_corner_indices(nodes_per_elem) + cell_coords = coords[row[corner_inds]] + if nodes_per_elem == 4: + metric = _tet_signed_volume(cell_coords) + else: + metric = _hex_signed_volume(cell_coords) + + if abs(metric) > _TOL: + return True + + return False + + +def _is_quad8_surface_row( + connect_row: np.ndarray, + coords: np.ndarray, +) -> bool: + """Return whether an eight-node row has the QUAD8 midside layout.""" + elem_coords = coords[connect_row] + corners = elem_coords[:4] + midsides = elem_coords[4:] + edge_starts = corners + edge_ends = np.roll(corners, -1, axis=0) + edges = edge_ends - edge_starts + edge_lengths = np.linalg.norm(edges, axis=1) + if np.any(edge_lengths <= _TOL): + return False + + edge_params = np.sum((midsides - edge_starts) * edges, axis=1) + edge_params /= edge_lengths**2 + closest = edge_starts + edge_params[:, None] * edges + distances = np.linalg.norm(midsides - closest, axis=1) + on_edges = distances <= _QUAD8_EDGE_TOL * edge_lengths + between_corners = np.logical_and(edge_params >= 0.0, edge_params <= 1.0) + return bool(np.all(np.logical_and(on_edges, between_corners))) + + +def extract_surf_mesh( + mesh_in: SimData, + enforce_convention: bool = True, +) -> SimData: + """Extracts the external surface mesh from supported 3D volume elements.""" + + if is_mesh_2d(mesh_in): + raise ValueError( + "Surface extraction is only supported for 3D meshes. " + "The provided mesh appears to be 2D." + ) + + if mesh_in.connect is None: + raise ValueError("Surface extraction requires connectivity tables.") + if mesh_in.coords is None: + raise ValueError("Surface extraction requires coords.") + + connect_norm: dict[str, np.ndarray] = {} + source_zero_based = True + source_row_major = True + shift_all = _infer_mesh_zero_based_shift(mesh_in, mesh_in.coords.shape[0]) + + for name, connect_raw in mesh_in.connect.items(): + connect = _coerce_connect_array(connect_raw, name) + if _should_transpose_connectivity(connect, name, mesh_in): + source_row_major = False + connect = connect.T + legacy_connect = _table_needs_zero_based_shift( + connect, + mesh_in.coords.shape[0], + shift_all, + ) + if legacy_connect: + source_zero_based = False + connect = connect - 1 + if not _check_indices_zero_based(connect, mesh_in.coords.shape[0]): + raise ValueError( + f"Connectivity table '{name}' contains invalid indices for surface extraction." + ) + connect = _normalise_legacy_connectivity_order(connect, legacy_connect) + connect_norm[name] = _enforce_right_handed_table( + _enforce_ccw_winding_table(connect, mesh_in.coords), + mesh_in.coords, + ) + + surf_connect_global: dict[str, np.ndarray] = {} + surf_elem_sources: dict[str, np.ndarray] = {} + surf_node_inds = np.array([], dtype=np.int64) + + for name, connect in connect_norm.items(): + (surf_faces, surf_parent_elem_inds) = _extract_surface_faces_from_table( + connect, + mesh_in.coords, + ) + surf_connect_global[name] = surf_faces + surf_elem_sources[name] = surf_parent_elem_inds + if surf_faces.size: + surf_node_inds = np.union1d(surf_node_inds, np.unique(surf_faces)) + + surf_coords = np.ascontiguousarray(mesh_in.coords[surf_node_inds], + dtype=mesh_in.coords.dtype) + coord_remap = np.full(mesh_in.coords.shape[0], -1, dtype=np.int64) + coord_remap[surf_node_inds] = np.arange(surf_node_inds.shape[0], dtype=np.int64) + + surf_connect_local: dict[str, np.ndarray] = {} + for name, surf_faces in surf_connect_global.items(): + surf_connect_local[name] = coord_remap[surf_faces] + + surf_mesh = _copy_sim_data(mesh_in) + surf_mesh.coords = surf_coords + surf_mesh.connect = surf_connect_local + surf_mesh.refresh_mesh_type() + + if mesh_in.node_vars is not None: + surf_mesh.node_vars = { + name: values[surf_node_inds, :] + for name, values in mesh_in.node_vars.items() + } + + if mesh_in.elem_vars is not None: + surf_mesh.elem_vars = {} + for (name, block_id), values in mesh_in.elem_vars.items(): + connect_key = f"connect{block_id}" + if connect_key in surf_elem_sources: + surf_mesh.elem_vars[(name, block_id)] = values[surf_elem_sources[connect_key], :] + + if not enforce_convention: + surf_mesh = _restore_source_connectivity_style( + surf_mesh, + one_based=not source_zero_based, + transposed=not source_row_major, + ) + return surf_mesh + + return surf_mesh + + +def _copy_sim_data(mesh_in: SimData, + connect: dict[str, np.ndarray] | None = None) -> SimData: + mesh_out = SimData( + num_spat_dims=mesh_in.num_spat_dims, + mesh_type=mesh_in.mesh_type, + time=mesh_in.time, + coords=mesh_in.coords, + connect=mesh_in.connect if connect is None else connect, + side_sets=mesh_in.side_sets, + node_vars=mesh_in.node_vars, + elem_vars=mesh_in.elem_vars, + glob_vars=mesh_in.glob_vars, + ) + return mesh_out + + +def _mesh_type_is_surface(mesh_type: object | None) -> bool: + if mesh_type is None: + return False + return getattr(mesh_type, "value", mesh_type) == "surface" + + +def _coerce_connect_array(connect: np.ndarray, name: str) -> np.ndarray: + array = np.asarray(connect) + if array.ndim != 2: + raise ValueError( + f"Connectivity table '{name}' must be 2D, got shape {array.shape}." + ) + return np.ascontiguousarray(array, dtype=np.int64) + + +def _supported_nodes_per_elem(nodes_per_elem: int) -> None: + if nodes_per_elem not in _SUPPORTED_NODE_COUNTS: + raise NotImplementedError( + "Mesh convention tools do not support elements with " + f"{nodes_per_elem} nodes." + ) + + +def _should_transpose_connectivity( + connect: np.ndarray, + connect_name: str | None = None, + mesh_in: SimData | None = None, +) -> bool: + rows_supported = connect.shape[0] in _SUPPORTED_NODE_COUNTS + cols_supported = connect.shape[1] in _SUPPORTED_NODE_COUNTS + + if rows_supported and not cols_supported: + return True + if cols_supported and not rows_supported: + return False + if cols_supported and rows_supported: + block_rows = _get_elem_var_block_rows(connect_name, mesh_in) + if block_rows is not None: + row_match = connect.shape[0] in block_rows + col_match = connect.shape[1] in block_rows + if row_match and not col_match: + return False + if col_match and not row_match: + return True + if mesh_in is not None and mesh_in.coords is not None: + return _score_orientation(connect.T, mesh_in.coords) > _score_orientation( + connect, + mesh_in.coords, + ) + return False + raise NotImplementedError( + "Could not infer connectivity orientation from shape " + f"{connect.shape}. Expected a supported nodes-per-element dimension." + ) + + +def _needs_zero_based_shift(connect: np.ndarray, num_coords: int) -> bool: + if connect.size == 0: + return False + if np.any(connect < 0): + return False + if np.any(connect == 0): + return False + return bool(np.any(connect >= num_coords)) + + +def _is_ambiguously_positive(connect: np.ndarray, num_coords: int) -> bool: + if connect.size == 0: + return False + return bool( + np.all(connect >= 1) + and np.all(connect < num_coords) + and not np.any(connect == 0) + ) + + +def _infer_mesh_zero_based_shift(mesh_in: SimData, num_coords: int) -> bool: + any_zero_based = False + any_definitely_one_based = False + + for connect_name, connect_raw in mesh_in.connect.items(): + connect = np.asarray(connect_raw, dtype=np.int64) + if _should_transpose_connectivity(connect, connect_name, mesh_in): + connect = connect.T + if np.any(connect == 0): + any_zero_based = True + if _needs_zero_based_shift(connect, num_coords): + any_definitely_one_based = True + + if any_zero_based and any_definitely_one_based: + raise ValueError( + "Mixed zero-based and one-based connectivity tables detected in the same mesh." + ) + + return any_definitely_one_based and not any_zero_based + + +def _table_needs_zero_based_shift( + connect: np.ndarray, + num_coords: int, + shift_all: bool, +) -> bool: + if _needs_zero_based_shift(connect, num_coords): + return True + return shift_all and _is_ambiguously_positive(connect, num_coords) + + +def _get_elem_var_block_rows( + connect_name: str | None, + mesh_in: SimData | None, +) -> set[int] | None: + if connect_name is None or mesh_in is None or mesh_in.elem_vars is None: + return None + + try: + block_id = int(connect_name.replace("connect", "")) + except ValueError: + return None + + row_counts = { + values.shape[0] + for (_field_name, field_block), values in mesh_in.elem_vars.items() + if field_block == block_id + } + return row_counts or None + + +def _check_indices_zero_based(connect: np.ndarray, num_coords: int) -> bool: + if connect.size == 0: + return True + valid_mask = np.logical_and(connect >= 0, connect < num_coords) + return bool(np.all(valid_mask)) + + +def _as_row_major_zero_based( + connect: np.ndarray, + num_coords: int, + *, + shift_all: bool = False, +) -> np.ndarray: + connect_out = np.asarray(connect, dtype=np.int64) + if connect_out.ndim != 2: + raise ValueError(f"Connectivity table must be 2D, got shape {connect_out.shape}.") + if _should_transpose_connectivity(connect_out): + connect_out = connect_out.T + legacy_connect = _table_needs_zero_based_shift(connect_out, num_coords, shift_all) + if legacy_connect: + connect_out = connect_out - 1 + connect_out = _normalise_legacy_connectivity_order(connect_out, legacy_connect) + return np.ascontiguousarray(connect_out, dtype=np.int64) + + +def _score_orientation(connect_row_major: np.ndarray, coords: np.ndarray) -> int: + num_coords = coords.shape[0] + connect_eval = np.asarray(connect_row_major, dtype=np.int64) + + if connect_eval.ndim != 2 or connect_eval.shape[1] not in _SUPPORTED_NODE_COUNTS: + return -1 + + if _needs_zero_based_shift(connect_eval, num_coords): + connect_eval = connect_eval - 1 + + if not _check_indices_zero_based(connect_eval, num_coords): + return -1 + + score = 0 + for row in connect_eval: + if np.unique(row).shape[0] != row.shape[0]: + continue + + try: + metric = _orientation_score_metric(row, coords) + except ValueError: + continue + + if metric is not None and abs(metric) > _TOL: + score += 1 + + return score + + +def _orientation_score_metric( + connect_row: np.ndarray, + coords: np.ndarray, +) -> float | None: + """Return a metric only for resolving row-major connectivity ambiguity.""" + nodes_per_elem = connect_row.shape[0] + + if nodes_per_elem in _SURFACE_NODE_COUNTS: + corner_coords = coords[connect_row[_get_corner_indices(nodes_per_elem)]] + if _is_coplanar(corner_coords): + return _polygon_signed_area(corner_coords) + + if nodes_per_elem in (4, 10): + volume_coords = coords[ + connect_row[_get_volume_corner_indices(nodes_per_elem)] + ] + metric = _tet_signed_volume(volume_coords) + if nodes_per_elem == 10 or abs(metric) > _TOL: + return metric + + if nodes_per_elem in (8, 20, 27): + volume_coords = coords[ + connect_row[_get_volume_corner_indices(nodes_per_elem)] + ] + metric = _hex_signed_volume(volume_coords) + if nodes_per_elem in (20, 27) or abs(metric) > _TOL: + return metric + + return None + + +def _normalise_legacy_connectivity_order( + connect: np.ndarray, + legacy_connect: bool, +) -> np.ndarray: + if not legacy_connect: + return connect + + nodes_per_elem = connect.shape[1] + if nodes_per_elem == 20: + perm = np.array((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 12, 13, 14, 15)) + return np.ascontiguousarray(connect[:, perm], dtype=np.int64) + if nodes_per_elem == 27: + perm = np.array((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 12, 13, 14, 15, 26, 24, 25, 20, 21, 22, 23)) + return np.ascontiguousarray(connect[:, perm], dtype=np.int64) + return connect + + +def _get_corner_indices(nodes_per_elem: int) -> np.ndarray: + _supported_nodes_per_elem(nodes_per_elem) + if nodes_per_elem in (3, 6, 7): + return np.array((0, 1, 2), dtype=np.int64) + if nodes_per_elem in (4, 8, 9): + return np.array((0, 1, 2, 3), dtype=np.int64) + if nodes_per_elem in (10,): + return np.array((0, 1, 2, 3), dtype=np.int64) + if nodes_per_elem in (20, 27): + return np.array((0, 1, 2, 3, 4, 5, 6, 7), dtype=np.int64) + return np.arange(nodes_per_elem, dtype=np.int64) + + +def _get_volume_corner_indices(nodes_per_elem: int) -> np.ndarray: + _supported_nodes_per_elem(nodes_per_elem) + if nodes_per_elem in (4, 10): + return np.array((0, 1, 2, 3), dtype=np.int64) + if nodes_per_elem in (8, 20, 27): + return np.array((0, 1, 2, 3, 4, 5, 6, 7), dtype=np.int64) + raise NotImplementedError( + f"Volume corner extraction is not implemented for {nodes_per_elem}-node elements." + ) + + +def _active_coord_axes(coords: np.ndarray) -> np.ndarray: + axis_range = np.ptp(coords, axis=0) + active = np.flatnonzero(axis_range > _TOL) + if active.shape[0] < 2: + raise ValueError("At least two active coordinate axes are required.") + return active[:2] + + +def _polygon_signed_area(coords_elem: np.ndarray) -> float: + axes = _active_coord_axes(coords_elem) + xy = coords_elem[:, axes] + rolled = np.roll(xy, -1, axis=0) + return 0.5 * np.sum(xy[:, 0] * rolled[:, 1] - rolled[:, 0] * xy[:, 1]) + + +def _is_coplanar(coords_elem: np.ndarray) -> bool: + centred = coords_elem - np.mean(coords_elem, axis=0) + return np.linalg.matrix_rank(centred, tol=_TOL) <= 2 + + +def _tet_signed_volume(coords_elem: np.ndarray) -> float: + return float( + np.linalg.det( + np.column_stack(( + coords_elem[1] - coords_elem[0], + coords_elem[2] - coords_elem[0], + coords_elem[3] - coords_elem[0], + )) + ) + ) + + +def _hex_signed_volume(coords_elem: np.ndarray) -> float: + return float( + np.linalg.det( + np.column_stack(( + coords_elem[1] - coords_elem[0], + coords_elem[3] - coords_elem[0], + coords_elem[4] - coords_elem[0], + )) + ) + ) + + +def _winding_metric( + connect_row: np.ndarray, + coords: np.ndarray, + *, + surface_only: bool = False, +) -> float | None: + nodes_per_elem = connect_row.shape[0] + if nodes_per_elem not in _SURFACE_NODE_COUNTS: + return None + + if not surface_only and nodes_per_elem == 4: + cell_coords = coords[connect_row[_get_volume_corner_indices(4)]] + if abs(_tet_signed_volume(cell_coords)) > _TOL: + return None + elif not surface_only and nodes_per_elem == 8: + if not _is_quad8_surface_row(connect_row, coords): + cell_coords = coords[connect_row[_get_volume_corner_indices(8)]] + if abs(_hex_signed_volume(cell_coords)) > _TOL: + return None + + corner_inds = _get_corner_indices(nodes_per_elem) + coords_elem = coords[connect_row[corner_inds]] + if _is_coplanar(coords): + reference_normal = _canonical_plane_normal(coords) + else: + face_centroid = np.mean(coords_elem, axis=0) + outward = face_centroid - np.mean(coords, axis=0) + outward_norm = np.linalg.norm(outward) + if outward_norm <= _TOL: + return None + reference_normal = outward / outward_norm + + return _local_polygon_signed_area(coords_elem, reference_normal) + + +def _canonical_plane_normal(coords: np.ndarray) -> np.ndarray: + centred = coords - np.mean(coords, axis=0) + _, _, vectors = np.linalg.svd(centred, full_matrices=False) + normal = vectors[-1] + dominant_axis = int(np.argmax(np.abs(normal))) + if normal[dominant_axis] < 0.0: + normal = -normal + return normal / np.linalg.norm(normal) + + +def _local_polygon_signed_area( + coords_elem: np.ndarray, + reference_normal: np.ndarray, +) -> float | None: + origin = coords_elem[0] + axis_u = None + for point in coords_elem[1:]: + edge = point - origin + edge -= np.dot(edge, reference_normal) * reference_normal + edge_norm = np.linalg.norm(edge) + if edge_norm > _TOL: + axis_u = edge / edge_norm + break + + if axis_u is None: + return None + + axis_v = np.cross(reference_normal, axis_u) + projected = np.column_stack(( + (coords_elem - origin) @ axis_u, + (coords_elem - origin) @ axis_v, + )) + rolled = np.roll(projected, -1, axis=0) + return float(0.5 * np.sum( + projected[:, 0] * rolled[:, 1] + - rolled[:, 0] * projected[:, 1], + )) + + +def _handedness_metric( + connect_row: np.ndarray, + coords: np.ndarray, + *, + surface_only: bool = False, +) -> float | None: + nodes_per_elem = connect_row.shape[0] + if surface_only: + return _winding_metric(connect_row, coords, surface_only=True) + if nodes_per_elem in (4, 10): + volume_coords = coords[ + connect_row[_get_volume_corner_indices(nodes_per_elem)] + ] + volume_metric = _tet_signed_volume(volume_coords) + if nodes_per_elem == 10 or abs(volume_metric) > _TOL: + return volume_metric + if nodes_per_elem in (8, 20, 27): + volume_coords = coords[ + connect_row[_get_volume_corner_indices(nodes_per_elem)] + ] + volume_metric = _hex_signed_volume(volume_coords) + if nodes_per_elem in (20, 27): + return volume_metric + if not _is_quad8_surface_row(connect_row, coords): + if abs(volume_metric) > _TOL: + return volume_metric + + if nodes_per_elem in _SURFACE_NODE_COUNTS: + metric = _winding_metric(connect_row, coords) + if metric is not None: + return metric + raise NotImplementedError( + f"Handedness checks are not implemented for {nodes_per_elem}-node elements." + ) + + +def _check_ccw_winding_table( + connect: np.ndarray, + coords: np.ndarray, + *, + surface_only: bool = False, +) -> bool: + for row in connect: + metric = _winding_metric(row, coords, surface_only=surface_only) + if metric is None: + continue + if abs(metric) <= _TOL: + continue + if metric <= 0.0: + return False + return True + + +def _check_cw_winding_table(connect: np.ndarray, coords: np.ndarray) -> bool: + for row in connect: + metric = _winding_metric(row, coords) + if metric is None: + continue + if abs(metric) <= _TOL: + continue + if metric >= 0.0: + return False + return True + + +def _check_right_handed_table( + connect: np.ndarray, + coords: np.ndarray, + *, + surface_only: bool = False, +) -> bool: + for row in connect: + metric = _handedness_metric(row, coords, surface_only=surface_only) + if metric is None: + continue + if abs(metric) <= _TOL: + continue + if metric <= 0.0: + return False + return True + + +def _reverse_surface_row(connect_row: np.ndarray) -> np.ndarray: + nodes_per_elem = connect_row.shape[0] + perms = { + 3: np.array((0, 2, 1)), + 4: np.array((0, 3, 2, 1)), + 6: np.array((0, 2, 1, 5, 4, 3)), + 7: np.array((0, 2, 1, 5, 4, 3, 6)), + 8: np.array((0, 3, 2, 1, 7, 6, 5, 4)), + 9: np.array((0, 3, 2, 1, 7, 6, 5, 4, 8)), + } + _supported_nodes_per_elem(nodes_per_elem) + if nodes_per_elem not in perms: + raise NotImplementedError( + f"CCW/CW winding enforcement is not implemented for {nodes_per_elem}-node elements." + ) + return connect_row[perms[nodes_per_elem]] + + +def _reverse_handedness_row(connect_row: np.ndarray) -> np.ndarray: + nodes_per_elem = connect_row.shape[0] + perms = { + 4: np.array((0, 2, 1, 3)), + 10: np.array((0, 2, 1, 3, 6, 5, 4, 7, 9, 8)), + 8: np.array((0, 3, 2, 1, 4, 7, 6, 5)), + 20: np.array((0, 3, 2, 1, 4, 7, 6, 5, 11, 10, 9, 8, 15, 14, 13, 12, 16, 19, 18, 17)), + 27: np.array((0, 3, 2, 1, 4, 7, 6, 5, 11, 10, 9, 8, 15, 14, 13, 12, 16, 19, 18, 17, 20, 21, 22, 23, 24, 25, 26)), + } + if nodes_per_elem not in perms: + raise NotImplementedError( + f"Right-handed enforcement is not implemented for {nodes_per_elem}-node elements." + ) + return connect_row[perms[nodes_per_elem]] + + +def _get_face_corner_coords(face_coords: np.ndarray) -> np.ndarray: + nodes_per_face = face_coords.shape[0] + if nodes_per_face in (3, 6, 7): + return face_coords[:3, :] + if nodes_per_face in (4, 8, 9): + return face_coords[:4, :] + raise NotImplementedError( + f"Surface face corner extraction is not implemented for {nodes_per_face}-node faces." + ) + + +def _calc_face_normal(face_coords: np.ndarray) -> np.ndarray: + face_corners = _get_face_corner_coords(face_coords) + face_normal = np.cross( + face_corners[1] - face_corners[0], + face_corners[2] - face_corners[0], + ) + normal_mag = np.linalg.norm(face_normal) + + if normal_mag <= _TOL and face_corners.shape[0] == 4: + face_normal = np.cross( + face_corners[2] - face_corners[0], + face_corners[3] - face_corners[0], + ) + normal_mag = np.linalg.norm(face_normal) + + if normal_mag <= _TOL: + raise ValueError("Degenerate face detected while extracting the surface mesh.") + + return face_normal / normal_mag + + +def _orient_surface_face_outward( + face_connect: np.ndarray, + parent_connect: np.ndarray, + coords: np.ndarray, +) -> np.ndarray: + face_coords = coords[face_connect] + face_centroid = np.mean(_get_face_corner_coords(face_coords), axis=0) + + parent_corners = _get_volume_corner_indices(parent_connect.shape[0]) + parent_centroid = np.mean(coords[parent_connect[parent_corners]], axis=0) + + face_normal = _calc_face_normal(face_coords) + outward_dir = face_centroid - parent_centroid + + if np.dot(face_normal, outward_dir) < 0.0: + return _reverse_surface_row(face_connect) + return face_connect + + +def _normalise_surface_face_node_order( + face_connect: np.ndarray, + coords: np.ndarray, +) -> np.ndarray: + nodes_per_face = face_connect.shape[0] + face_out = np.copy(face_connect) + face_coords = coords[face_out] + + if nodes_per_face in (6, 7): + corner_inds = np.array((0, 1, 2), dtype=np.int64) + midside_pool = np.arange(3, nodes_per_face, dtype=np.int64) + edge_corner_pairs = ((0, 1), (1, 2), (2, 0)) + elif nodes_per_face in (8, 9): + corner_inds = np.array((0, 1, 2, 3), dtype=np.int64) + midside_pool = np.arange(4, nodes_per_face, dtype=np.int64) + edge_corner_pairs = ((0, 1), (1, 2), (2, 3), (3, 0)) + else: + return face_out + + face_centroid = np.mean(face_coords[corner_inds, :], axis=0) + mid_pool_coords = face_coords[midside_pool, :] + + if nodes_per_face in (7, 9): + centroid_dists = np.linalg.norm(mid_pool_coords - face_centroid, axis=1) + center_pool_ind = int(np.argmin(centroid_dists)) + center_local_ind = int(midside_pool[center_pool_ind]) + edge_pool_mask = np.ones(midside_pool.shape[0], dtype=bool) + edge_pool_mask[center_pool_ind] = False + edge_pool_local_inds = midside_pool[edge_pool_mask] + edge_pool_coords = face_coords[edge_pool_local_inds, :] + else: + center_local_ind = -1 + edge_pool_local_inds = midside_pool + edge_pool_coords = mid_pool_coords + + edge_midpoints = np.array( + [ + 0.5 * ( + face_coords[start_ind, :] + + face_coords[end_ind, :] + ) + for (start_ind, end_ind) in edge_corner_pairs + ], + dtype=np.float64, + ) + edge_dists = np.linalg.norm( + edge_pool_coords[:, None, :] - edge_midpoints[None, :, :], + axis=2, + ) + edge_order = np.argmin(edge_dists, axis=0) + reordered_edge_inds = edge_pool_local_inds[edge_order] + + if nodes_per_face == 6: + face_out[3:6] = face_out[reordered_edge_inds] + elif nodes_per_face == 7: + face_out[3:6] = face_out[reordered_edge_inds] + face_out[6] = face_out[center_local_ind] + elif nodes_per_face == 8: + face_out[4:8] = face_out[reordered_edge_inds] + elif nodes_per_face == 9: + face_out[4:8] = face_out[reordered_edge_inds] + face_out[8] = face_out[center_local_ind] + + return face_out + + +def _enforce_ccw_winding_table( + connect: np.ndarray, + coords: np.ndarray, + *, + surface_only: bool = False, +) -> np.ndarray: + connect_out = np.copy(connect) + for idx, row in enumerate(connect_out): + metric = _winding_metric(row, coords, surface_only=surface_only) + if metric is not None and metric < 0.0: + connect_out[idx, :] = _reverse_surface_row(row) + return np.ascontiguousarray(connect_out, dtype=np.int64) + + +def _enforce_cw_winding_table(connect: np.ndarray, coords: np.ndarray) -> np.ndarray: + connect_out = np.copy(connect) + for idx, row in enumerate(connect_out): + metric = _winding_metric(row, coords) + if metric is not None and metric > 0.0: + connect_out[idx, :] = _reverse_surface_row(row) + return np.ascontiguousarray(connect_out, dtype=np.int64) + + +def _enforce_right_handed_table( + connect: np.ndarray, + coords: np.ndarray, + *, + surface_only: bool = False, +) -> np.ndarray: + connect_out = np.copy(connect) + for idx, row in enumerate(connect_out): + metric = _handedness_metric(row, coords, surface_only=surface_only) + if metric is not None and metric < 0.0: + if surface_only or ( + row.shape[0] in _SURFACE_NODE_COUNTS + and _is_coplanar(coords[row[_get_corner_indices(row.shape[0])]]) + ): + connect_out[idx, :] = _reverse_surface_row(row) + else: + connect_out[idx, :] = _reverse_handedness_row(row) + return np.ascontiguousarray(connect_out, dtype=np.int64) + + +def _get_surface_map(nodes_per_elem: int) -> np.ndarray: + if nodes_per_elem == 4: # TET4 + return np.array(((0, 1, 2), + (0, 3, 1), + (0, 2, 3), + (1, 3, 2)), dtype=np.int64) + if nodes_per_elem == 8: # HEX8 + return np.array(((0, 1, 2, 3), + (0, 3, 7, 4), + (4, 7, 6, 5), + (1, 5, 6, 2), + (0, 4, 5, 1), + (2, 6, 7, 3)), dtype=np.int64) + if nodes_per_elem == 10: # TET10 + return np.array(((0, 1, 2, 4, 5, 6), + (0, 3, 1, 7, 8, 4), + (0, 2, 3, 6, 9, 7), + (1, 3, 2, 8, 9, 5)), dtype=np.int64) + if nodes_per_elem == 20: # HEX20 + return np.array(((0, 1, 2, 3, 8, 9, 10, 11), + (0, 3, 7, 4, 11, 15, 19, 16), + (4, 7, 6, 5, 15, 14, 13, 12), + (1, 5, 6, 2, 17, 13, 18, 9), + (0, 4, 5, 1, 16, 12, 17, 8), + (2, 6, 7, 3, 18, 14, 19, 10)), dtype=np.int64) + if nodes_per_elem == 27: # HEX27 + return np.array(((0, 1, 2, 3, 8, 9, 10, 11, 24), + (0, 3, 7, 4, 11, 15, 19, 16, 26), + (4, 7, 6, 5, 15, 14, 13, 12, 25), + (1, 5, 6, 2, 17, 13, 18, 9, 21), + (0, 4, 5, 1, 16, 12, 17, 8, 22), + (2, 6, 7, 3, 18, 14, 19, 10, 20)), dtype=np.int64) + raise NotImplementedError( + "Surface extraction is only implemented for tet and hex element families." + ) + + +def _extract_surface_faces_from_table( + connect: np.ndarray, + coords: np.ndarray, +) -> tuple[np.ndarray, np.ndarray]: + nodes_per_elem = connect.shape[1] + face_map = _get_surface_map(nodes_per_elem) + faces_wound = connect[:, face_map] + faces_flat_wound = faces_wound.reshape((-1, face_map.shape[1])) + faces_flat_sorted = np.sort(faces_flat_wound, axis=1) + + (_, unique_inds, unique_counts) = np.unique( + faces_flat_sorted, + axis=0, + return_index=True, + return_counts=True, + ) + ext_face_inds = unique_inds[unique_counts == 1] + ext_parent_elem_inds = np.ascontiguousarray( + ext_face_inds // face_map.shape[0], + dtype=np.int64, + ) + ext_faces = np.copy(faces_flat_wound[ext_face_inds]) + + for ff, parent_elem_ind in enumerate(ext_parent_elem_inds): + ext_faces[ff, :] = _orient_surface_face_outward( + ext_faces[ff, :], + connect[parent_elem_ind, :], + coords, + ) + ext_faces[ff, :] = _normalise_surface_face_node_order( + ext_faces[ff, :], + coords, + ) + + ext_faces = np.ascontiguousarray(ext_faces, dtype=np.int64) + return ext_faces, ext_parent_elem_inds + + +def _extract_parent_elem_inds(connect: np.ndarray) -> np.ndarray: + nodes_per_elem = connect.shape[1] + face_map = _get_surface_map(nodes_per_elem) + faces_per_elem = face_map.shape[0] + faces_wound = connect[:, face_map] + faces_flat_wound = faces_wound.reshape((-1, face_map.shape[1])) + faces_flat_sorted = np.sort(faces_flat_wound, axis=1) + + (_, unique_inds, unique_counts) = np.unique( + faces_flat_sorted, + axis=0, + return_index=True, + return_counts=True, + ) + ext_face_inds = unique_inds[unique_counts == 1] + return np.ascontiguousarray(ext_face_inds // faces_per_elem, dtype=np.int64) + + +def _restore_source_connectivity_style( + mesh_in: SimData, + *, + one_based: bool, + transposed: bool, +) -> SimData: + if mesh_in.connect is None: + return mesh_in + + connect_out: dict[str, np.ndarray] = {} + for name, connect in mesh_in.connect.items(): + connect_fmt = np.copy(connect) + if one_based: + connect_fmt = connect_fmt + 1 + if transposed: + connect_fmt = connect_fmt.T + connect_out[name] = np.ascontiguousarray(connect_fmt, dtype=np.int64) + + return _copy_sim_data(mesh_in, connect=connect_out) + + +def extract_surf_between( + mesh_in: SimData, + point: np.ndarray | list[float] | tuple[float, ...], + normal: np.ndarray | list[float] | tuple[float, ...], + distance: float | None = None, + tolerance: float = 1.0e-6, + enforce_convention: bool = True, +) -> SimData: + """Extracts a surface mesh between two planes defined by point, normal, + and distance. + + Parameters + ---------- + mesh_in : SimData + The input simulation data/mesh. + point : np.ndarray | list[float] | tuple[float, ...] + A point on the first plane. + normal : np.ndarray | list[float] | tuple[float, ...] + The normal vector of the planes. + distance : float | None, optional + The distance along the normal to the second plane. If None, the + surface is extracted at +/- tolerance about the first plane. + tolerance : float, optional + Numerical tolerance for checking if nodes lie between the planes. + Defaults to 1.0e-6. + enforce_convention : bool, optional + If True, normalizes the output mesh to the pyvale convention. + Defaults to True. + + Returns + ------- + SimData + The extracted surface mesh. + """ + if mesh_in.connect is None: + raise ValueError("Surface extraction requires connectivity tables.") + if mesh_in.coords is None: + raise ValueError("Surface extraction requires coords.") + + # Format point and normal to 3D arrays + point_arr = np.zeros(3, dtype=np.float64) + point_arr[:len(point)] = point + + normal_arr = np.zeros(3, dtype=np.float64) + normal_arr[:len(normal)] = normal + norm_val = np.linalg.norm(normal_arr) + if norm_val < _TOL: + raise ValueError("Normal vector cannot be zero.") + normal_arr = normal_arr / norm_val + + # Project coordinates along normal relative to point + diff = mesh_in.coords - point_arr + proj = diff @ normal_arr + + # Determine bounds + if distance is not None: + d = float(distance) + min_bound = min(0.0, d) - tolerance + max_bound = max(0.0, d) + tolerance + else: + min_bound = -tolerance + max_bound = tolerance + + connect_norm: dict[str, np.ndarray] = {} + source_zero_based = True + source_row_major = True + shift_all = _infer_mesh_zero_based_shift( + mesh_in, mesh_in.coords.shape[0] + ) + + for name, connect_raw in mesh_in.connect.items(): + connect = _coerce_connect_array(connect_raw, name) + if _should_transpose_connectivity(connect, name, mesh_in): + source_row_major = False + connect = connect.T + legacy_connect = _table_needs_zero_based_shift( + connect, + mesh_in.coords.shape[0], + shift_all, + ) + if legacy_connect: + source_zero_based = False + connect = connect - 1 + if not _check_indices_zero_based(connect, mesh_in.coords.shape[0]): + raise ValueError( + f"Connectivity table '{name}' contains invalid indices " + "for surface extraction." + ) + connect = _normalise_legacy_connectivity_order( + connect, legacy_connect + ) + connect_norm[name] = _enforce_right_handed_table( + _enforce_ccw_winding_table(connect, mesh_in.coords), + mesh_in.coords, + ) + + surf_connect_global: dict[str, np.ndarray] = {} + surf_elem_sources: dict[str, np.ndarray] = {} + surf_node_inds = np.array([], dtype=np.int64) + + for name, connect in connect_norm.items(): + nodes_per_elem = connect.shape[1] + is_vol = nodes_per_elem in (4, 8, 10, 20, 27) + if is_vol: + face_map = _get_surface_map(nodes_per_elem) + faces_per_elem = face_map.shape[0] + faces_wound = connect[:, face_map] + faces_flat_wound = faces_wound.reshape((-1, face_map.shape[1])) + faces_flat_sorted = np.sort(faces_flat_wound, axis=1) + + _, unique_inds = np.unique( + faces_flat_sorted, + axis=0, + return_index=True, + ) + candidate_faces = faces_flat_wound[unique_inds] + parent_inds = unique_inds // faces_per_elem + else: + candidate_faces = connect + parent_inds = np.arange(connect.shape[0], dtype=np.int64) + + if candidate_faces.size == 0: + continue + + face_projs = proj[candidate_faces] + in_bounds = np.all( + (face_projs >= min_bound) & (face_projs <= max_bound), + axis=1 + ) + + filtered_faces = candidate_faces[in_bounds] + filtered_parents = parent_inds[in_bounds] + + if filtered_faces.size > 0: + surf_connect_global[name] = filtered_faces + surf_elem_sources[name] = filtered_parents + surf_node_inds = np.union1d( + surf_node_inds, np.unique(filtered_faces) + ) + + if len(surf_connect_global) == 0 or surf_node_inds.size == 0: + raise ValueError( + "No elements/faces found between the specified planes." + ) + + surf_coords = np.ascontiguousarray( + mesh_in.coords[surf_node_inds], + dtype=mesh_in.coords.dtype + ) + coord_remap = np.full(mesh_in.coords.shape[0], -1, dtype=np.int64) + coord_remap[surf_node_inds] = np.arange( + surf_node_inds.shape[0], dtype=np.int64 + ) + + surf_connect_local: dict[str, np.ndarray] = {} + for name, surf_faces in surf_connect_global.items(): + surf_connect_local[name] = coord_remap[surf_faces] + + surf_mesh = _copy_sim_data(mesh_in) + surf_mesh.coords = surf_coords + surf_mesh.connect = surf_connect_local + surf_mesh.side_sets = None + + if mesh_in.node_vars is not None: + surf_mesh.node_vars = { + name: values[surf_node_inds, :] + for name, values in mesh_in.node_vars.items() + } + + if mesh_in.elem_vars is not None: + surf_mesh.elem_vars = {} + for (var_name, block_id), values in mesh_in.elem_vars.items(): + connect_key = f"connect{block_id}" + if connect_key in surf_elem_sources: + surf_mesh.elem_vars[(var_name, block_id)] = values[ + surf_elem_sources[connect_key], : + ] + + if not enforce_convention: + surf_mesh = _restore_source_connectivity_style( + surf_mesh, + one_based=not source_zero_based, + transposed=not source_row_major, + ) + return surf_mesh + + return enforce_mesh_convention(surf_mesh) + + +__all__ = [ + "MeshConventionCheck", + "MeshData", + "check_mesh_convention", + "enforce_mesh_convention", + "check_cw_winding", + "check_ccw_winding", + "enforce_cw_winding", + "enforce_ccw_winding", + "is_mesh_2d", + "is_volume_mesh", + "extract_surf_mesh", + "extract_surf_between", +] diff --git a/src/riley/python/meshtools.py b/src/riley/python/meshtools.py index 6cea9569..4063e650 100644 --- a/src/riley/python/meshtools.py +++ b/src/riley/python/meshtools.py @@ -6,139 +6,13 @@ # # Authors: scepticalrabbit (Lloyd Fletcher) # -------------------------------------------------------------------------- -from __future__ import annotations +"""Planar UV projection utilities.""" -from pathlib import Path +from __future__ import annotations import numpy as np -from riley.python.enums import ( - ConnectIndexing, - PlanarProjectionMode, - ProjectionPlane, -) - - -_SURFACE_NODE_COUNTS = frozenset((3, 4, 6, 7, 8, 9)) -_TOL = 1.0e-12 - - -def enforce_mesh_convention( - coords: np.ndarray, - connect: np.ndarray, - *, - indexing: ConnectIndexing = ConnectIndexing.auto, -) -> tuple[np.ndarray, np.ndarray]: - coords_out = np.ascontiguousarray(coords, dtype=np.float64) - connect_out = np.ascontiguousarray(connect, dtype=np.int64) - - if indexing == ConnectIndexing.one_based: - connect_out = connect_out - 1 - elif indexing == ConnectIndexing.auto and _needs_zero_based_shift( - connect_out, - coords_out.shape[0], - ): - connect_out = connect_out - 1 - - if not _check_indices_zero_based(connect_out, coords_out.shape[0]): - raise ValueError("Connectivity contains indices outside the coordinate array.") - - connect_out = _enforce_right_handed_table( - _enforce_ccw_winding_table(connect_out, coords_out), - coords_out, - ) - - return coords_out, np.ascontiguousarray(connect_out, dtype=np.uintp) - - -def is_mesh_2d(coords: np.ndarray, connect: np.ndarray) -> bool: - # 1. Check coordinate flatness - coord_ranges = np.ptp(coords, axis=0) - if np.any(coord_ranges < 1e-12): - return True - - # 2. Check element nodes - nodes_per_elem = connect.shape[1] - if nodes_per_elem in (3, 6, 7, 9): - return True - if nodes_per_elem in (10, 20, 27): - return False - - if nodes_per_elem == 4: - num_check = min(10, connect.shape[0]) - is_tet = False - for i in range(num_check): - elem = connect[i] - v = coords[elem] - vol = np.abs( - np.dot(v[1] - v[0], np.cross(v[2] - v[0], v[3] - v[0])) - ) - if vol > 1e-10: - is_tet = True - break - if not is_tet: - return True - - if nodes_per_elem == 8: - num_check = min(10, connect.shape[0]) - is_hex = False - for i in range(num_check): - elem = connect[i] - v = coords[elem] - vol = np.abs( - np.dot(v[1] - v[0], np.cross(v[2] - v[0], v[4] - v[0])) - ) - if vol > 1e-10: - is_hex = True - break - if not is_hex: - return True - - return False - - -def extract_surface_mesh( - coords: np.ndarray, - connect: np.ndarray, - *, - indexing: ConnectIndexing = ConnectIndexing.auto, - enforce_convention: bool = True, -) -> tuple[np.ndarray, np.ndarray]: - coords_norm, connect_norm = enforce_mesh_convention( - coords, - connect, - indexing=indexing, - ) - connect_work = np.ascontiguousarray(connect_norm, dtype=np.int64) - - if is_mesh_2d(coords_norm, connect_norm): - raise ValueError( - "Surface extraction is only supported for 3D meshes. " - "The provided mesh appears to be 2D." - ) - - if connect_work.shape[1] not in (4, 8, 10, 20, 27): - raise NotImplementedError( - "Surface extraction is only implemented for tet and hex element " - "families.", - ) - - surf_faces, _ = _extract_surface_faces_from_table(connect_work, coords_norm) - surf_node_inds = np.unique(surf_faces) - surf_coords = np.ascontiguousarray(coords_norm[surf_node_inds], dtype=np.float64) - - coord_remap = np.full(coords_norm.shape[0], -1, dtype=np.int64) - coord_remap[surf_node_inds] = np.arange(surf_node_inds.shape[0], dtype=np.int64) - surf_connect = coord_remap[surf_faces] - - if enforce_convention: - surf_coords, surf_connect = enforce_mesh_convention( - surf_coords, - surf_connect, - indexing=ConnectIndexing.zero_based, - ) - - return surf_coords, np.ascontiguousarray(surf_connect, dtype=np.uintp) +from riley.python.enums import PlanarProjectionMode, ProjectionPlane def project_uvs_planar_bbox( @@ -306,372 +180,7 @@ def _resolve_projection_axes( return origin, u_axis, v_axis -def _needs_zero_based_shift(connect: np.ndarray, num_coords: int) -> bool: - if connect.size == 0: - return False - if np.any(connect < 0): - return False - if np.any(connect == 0): - return False - return bool(np.any(connect >= num_coords)) - - -def _check_indices_zero_based(connect: np.ndarray, num_coords: int) -> bool: - if connect.size == 0: - return True - return bool(np.all((connect >= 0) & (connect < num_coords))) - - -def _get_corner_indices(nodes_per_elem: int) -> np.ndarray: - if nodes_per_elem in (3, 6, 7): - return np.array((0, 1, 2), dtype=np.int64) - if nodes_per_elem in (4, 8, 9): - return np.array((0, 1, 2, 3), dtype=np.int64) - if nodes_per_elem == 10: - return np.array((0, 1, 2, 3), dtype=np.int64) - if nodes_per_elem in (20, 27): - return np.array((0, 1, 2, 3, 4, 5, 6, 7), dtype=np.int64) - raise NotImplementedError( - f"Unsupported element type with {nodes_per_elem} nodes.", - ) - - -def _get_volume_corner_indices(nodes_per_elem: int) -> np.ndarray: - if nodes_per_elem in (4, 10): - return np.array((0, 1, 2, 3), dtype=np.int64) - if nodes_per_elem in (8, 20, 27): - return np.array((0, 1, 2, 3, 4, 5, 6, 7), dtype=np.int64) - raise NotImplementedError( - f"Unsupported volume element with {nodes_per_elem} nodes.", - ) - - -def _active_coord_axes(coords: np.ndarray) -> np.ndarray: - axis_range = np.ptp(coords, axis=0) - active = np.flatnonzero(axis_range > _TOL) - if active.shape[0] < 2: - raise ValueError("At least two active coordinate axes are required.") - return active[:2] - - -def _polygon_signed_area(coords_elem: np.ndarray) -> float: - axes = _active_coord_axes(coords_elem) - xy = coords_elem[:, axes] - rolled = np.roll(xy, -1, axis=0) - return float( - 0.5 * np.sum(xy[:, 0] * rolled[:, 1] - rolled[:, 0] * xy[:, 1]), - ) - - -def _is_coplanar(coords_elem: np.ndarray) -> bool: - centred = coords_elem - np.mean(coords_elem, axis=0) - return np.linalg.matrix_rank(centred, tol=_TOL) <= 2 - - -def _tet_signed_volume(coords_elem: np.ndarray) -> float: - return float( - np.linalg.det( - np.column_stack(( - coords_elem[1] - coords_elem[0], - coords_elem[2] - coords_elem[0], - coords_elem[3] - coords_elem[0], - )), - ), - ) - - -def _hex_signed_volume(coords_elem: np.ndarray) -> float: - return float( - np.linalg.det( - np.column_stack(( - coords_elem[1] - coords_elem[0], - coords_elem[3] - coords_elem[0], - coords_elem[4] - coords_elem[0], - )), - ), - ) - - -def _winding_metric(connect_row: np.ndarray, coords: np.ndarray) -> float | None: - nodes_per_elem = connect_row.shape[0] - if nodes_per_elem not in _SURFACE_NODE_COUNTS: - return None - corner_inds = _get_corner_indices(nodes_per_elem) - coords_elem = coords[connect_row[corner_inds]] - if not _is_coplanar(coords_elem): - return None - return _polygon_signed_area(coords_elem) - - -def _handedness_metric(connect_row: np.ndarray, coords: np.ndarray) -> float | None: - nodes_per_elem = connect_row.shape[0] - if nodes_per_elem in _SURFACE_NODE_COUNTS: - metric = _winding_metric(connect_row, coords) - if metric is not None: - return metric - - corner_inds = _get_corner_indices(nodes_per_elem) - coords_elem = coords[connect_row[corner_inds]] - if nodes_per_elem in (4, 10): - return _tet_signed_volume(coords_elem) - if nodes_per_elem in (8, 20, 27): - return _hex_signed_volume(coords_elem) - - raise NotImplementedError( - f"Unsupported handedness check for {nodes_per_elem}-node elements.", - ) - - -def _reverse_surface_row(connect_row: np.ndarray) -> np.ndarray: - perms = { - 3: np.array((0, 2, 1)), - 4: np.array((0, 3, 2, 1)), - 6: np.array((0, 2, 1, 5, 4, 3)), - 7: np.array((0, 2, 1, 5, 4, 3, 6)), - 8: np.array((0, 3, 2, 1, 7, 6, 5, 4)), - 9: np.array((0, 3, 2, 1, 7, 6, 5, 4, 8)), - } - return connect_row[perms[connect_row.shape[0]]] - - -def _reverse_handedness_row(connect_row: np.ndarray) -> np.ndarray: - perms = { - 4: np.array((0, 2, 1, 3)), - 10: np.array((0, 2, 1, 3, 6, 5, 4, 7, 9, 8)), - 8: np.array((0, 3, 2, 1, 4, 7, 6, 5)), - 20: np.array(( - 0, 3, 2, 1, 4, 7, 6, 5, 11, 10, 9, 8, 15, 14, 13, 12, 16, 19, 18, 17, - )), - 27: np.array(( - 0, 3, 2, 1, 4, 7, 6, 5, 11, 10, 9, 8, 15, 14, 13, 12, 16, 19, 18, 17, - 20, 21, 22, 23, 24, 25, 26, - )), - } - return connect_row[perms[connect_row.shape[0]]] - - -def _enforce_ccw_winding_table(connect: np.ndarray, coords: np.ndarray) -> np.ndarray: - connect_out = np.copy(connect) - for row_ind, row in enumerate(connect_out): - metric = _winding_metric(row, coords) - if metric is not None and metric < 0.0: - connect_out[row_ind, :] = _reverse_surface_row(row) - return np.ascontiguousarray(connect_out, dtype=np.int64) - - -def _enforce_right_handed_table( - connect: np.ndarray, - coords: np.ndarray, -) -> np.ndarray: - connect_out = np.copy(connect) - for row_ind, row in enumerate(connect_out): - metric = _handedness_metric(row, coords) - if metric is None or metric >= 0.0: - continue - - row_corners = coords[row[_get_corner_indices(row.shape[0])]] - if row.shape[0] in _SURFACE_NODE_COUNTS and _is_coplanar(row_corners): - connect_out[row_ind, :] = _reverse_surface_row(row) - else: - connect_out[row_ind, :] = _reverse_handedness_row(row) - return np.ascontiguousarray(connect_out, dtype=np.int64) - - -def _get_face_corner_coords(face_coords: np.ndarray) -> np.ndarray: - if face_coords.shape[0] in (3, 6, 7): - return face_coords[:3, :] - if face_coords.shape[0] in (4, 8, 9): - return face_coords[:4, :] - raise NotImplementedError( - f"Unsupported surface face with {face_coords.shape[0]} nodes.", - ) - - -def _calc_face_normal(face_coords: np.ndarray) -> np.ndarray: - face_corners = _get_face_corner_coords(face_coords) - face_normal = np.cross( - face_corners[1] - face_corners[0], - face_corners[2] - face_corners[0], - ) - normal_mag = np.linalg.norm(face_normal) - - if normal_mag <= _TOL and face_corners.shape[0] == 4: - face_normal = np.cross( - face_corners[2] - face_corners[0], - face_corners[3] - face_corners[0], - ) - normal_mag = np.linalg.norm(face_normal) - - if normal_mag <= _TOL: - raise ValueError("Degenerate face detected while extracting a surface.") - - return face_normal / normal_mag - - -def _orient_surface_face_outward( - face_connect: np.ndarray, - parent_connect: np.ndarray, - coords: np.ndarray, -) -> np.ndarray: - face_coords = coords[face_connect] - face_centroid = np.mean(_get_face_corner_coords(face_coords), axis=0) - - parent_corners = _get_volume_corner_indices(parent_connect.shape[0]) - parent_centroid = np.mean(coords[parent_connect[parent_corners]], axis=0) - - face_normal = _calc_face_normal(face_coords) - outward_dir = face_centroid - parent_centroid - - if np.dot(face_normal, outward_dir) < 0.0: - return _reverse_surface_row(face_connect) - return face_connect - - -def _normalise_surface_face_node_order( - face_connect: np.ndarray, - coords: np.ndarray, -) -> np.ndarray: - nodes_per_face = face_connect.shape[0] - face_out = np.copy(face_connect) - face_coords = coords[face_out] - - if nodes_per_face in (6, 7): - corner_inds = np.array((0, 1, 2), dtype=np.int64) - midside_pool = np.arange(3, nodes_per_face, dtype=np.int64) - edge_corner_pairs = ((0, 1), (1, 2), (2, 0)) - elif nodes_per_face in (8, 9): - corner_inds = np.array((0, 1, 2, 3), dtype=np.int64) - midside_pool = np.arange(4, nodes_per_face, dtype=np.int64) - edge_corner_pairs = ((0, 1), (1, 2), (2, 3), (3, 0)) - else: - return face_out - - face_centroid = np.mean(face_coords[corner_inds, :], axis=0) - mid_pool_coords = face_coords[midside_pool, :] - - if nodes_per_face in (7, 9): - centroid_dists = np.linalg.norm(mid_pool_coords - face_centroid, axis=1) - center_pool_ind = int(np.argmin(centroid_dists)) - center_local_ind = int(midside_pool[center_pool_ind]) - edge_pool_mask = np.ones(midside_pool.shape[0], dtype=bool) - edge_pool_mask[center_pool_ind] = False - edge_pool_local_inds = midside_pool[edge_pool_mask] - edge_pool_coords = face_coords[edge_pool_local_inds, :] - else: - center_local_ind = -1 - edge_pool_local_inds = midside_pool - edge_pool_coords = mid_pool_coords - - edge_midpoints = np.array( - [ - 0.5 * (face_coords[start_ind, :] + face_coords[end_ind, :]) - for start_ind, end_ind in edge_corner_pairs - ], - dtype=np.float64, - ) - edge_dists = np.linalg.norm( - edge_pool_coords[:, None, :] - edge_midpoints[None, :, :], - axis=2, - ) - edge_order = np.argmin(edge_dists, axis=0) - reordered_edge_inds = edge_pool_local_inds[edge_order] - - if nodes_per_face == 6: - face_out[3:6] = face_out[reordered_edge_inds] - elif nodes_per_face == 7: - face_out[3:6] = face_out[reordered_edge_inds] - face_out[6] = face_out[center_local_ind] - elif nodes_per_face == 8: - face_out[4:8] = face_out[reordered_edge_inds] - elif nodes_per_face == 9: - face_out[4:8] = face_out[reordered_edge_inds] - face_out[8] = face_out[center_local_ind] - - return face_out - - -def _get_surface_map(nodes_per_elem: int) -> np.ndarray: - if nodes_per_elem == 4: - return np.array(((0, 1, 2), (0, 3, 1), (0, 2, 3), (1, 3, 2))) - if nodes_per_elem == 8: - return np.array(( - (0, 1, 2, 3), - (0, 3, 7, 4), - (4, 7, 6, 5), - (1, 5, 6, 2), - (0, 4, 5, 1), - (2, 6, 7, 3), - )) - if nodes_per_elem == 10: - return np.array(( - (0, 1, 2, 4, 5, 6), - (0, 3, 1, 7, 8, 4), - (0, 2, 3, 6, 9, 7), - (1, 3, 2, 8, 9, 5), - )) - if nodes_per_elem == 20: - return np.array(( - (0, 1, 2, 3, 8, 9, 10, 11), - (0, 3, 7, 4, 11, 15, 19, 16), - (4, 7, 6, 5, 15, 14, 13, 12), - (1, 5, 6, 2, 17, 13, 18, 9), - (0, 4, 5, 1, 16, 12, 17, 8), - (2, 6, 7, 3, 18, 14, 19, 10), - )) - if nodes_per_elem == 27: - return np.array(( - (0, 1, 2, 3, 8, 9, 10, 11, 24), - (0, 3, 7, 4, 11, 15, 19, 16, 26), - (4, 7, 6, 5, 15, 14, 13, 12, 25), - (1, 5, 6, 2, 17, 13, 18, 9, 21), - (0, 4, 5, 1, 16, 12, 17, 8, 22), - (2, 6, 7, 3, 18, 14, 19, 10, 20), - )) - raise NotImplementedError( - "Surface extraction is only implemented for tet and hex element families.", - ) - - -def _extract_surface_faces_from_table( - connect: np.ndarray, - coords: np.ndarray, -) -> tuple[np.ndarray, np.ndarray]: - nodes_per_elem = connect.shape[1] - face_map = _get_surface_map(nodes_per_elem) - faces_wound = connect[:, face_map] - faces_flat_wound = faces_wound.reshape((-1, face_map.shape[1])) - faces_flat_sorted = np.sort(faces_flat_wound, axis=1) - - _, unique_inds, unique_counts = np.unique( - faces_flat_sorted, - axis=0, - return_index=True, - return_counts=True, - ) - ext_face_inds = unique_inds[unique_counts == 1] - ext_parent_elem_inds = np.ascontiguousarray( - ext_face_inds // face_map.shape[0], - dtype=np.int64, - ) - ext_faces = np.copy(faces_flat_wound[ext_face_inds]) - - for face_ind, parent_elem_ind in enumerate(ext_parent_elem_inds): - ext_faces[face_ind, :] = _orient_surface_face_outward( - ext_faces[face_ind, :], - connect[parent_elem_ind, :], - coords, - ) - ext_faces[face_ind, :] = _normalise_surface_face_node_order( - ext_faces[face_ind, :], - coords, - ) - - return np.ascontiguousarray(ext_faces, dtype=np.int64), ext_parent_elem_inds - - __all__ = [ - "enforce_mesh_convention", - "extract_surface_mesh", "project_uvs_planar_bbox", "project_uvs_planar_centered", ] From cc56d7289d14530ad38d14ca4fa562bc699e8ecc Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Fri, 21 Aug 2026 13:07:31 +0100 Subject: [PATCH 10/38] Finished migration of safe mesh data to new convention maintaining test parity --- data/bench/gen_bench_data.py | 19 +++++++++++++++---- data/calplate/main_gen_calplate.py | 13 ++++++++++++- data/edge/gen_data_rot.py | 8 ++++++++ data/edge/gen_distort_data.py | 8 ++++++++ data/edge/gen_stress_data.py | 13 +++++++++++-- data/edge/gen_vertbulge_data.py | 12 +++++++++++- data/simple/gendata.py | 8 ++++++++ data/small/gendata.py | 8 ++++++++ data/tilt/gen_tilt_data.py | 9 +++++++++ 9 files changed, 90 insertions(+), 8 deletions(-) diff --git a/data/bench/gen_bench_data.py b/data/bench/gen_bench_data.py index f345b912..f8683279 100644 --- a/data/bench/gen_bench_data.py +++ b/data/bench/gen_bench_data.py @@ -1,10 +1,23 @@ import numpy as np import os +from riley.python import meshconv + def save_csv(path, data): os.makedirs(os.path.dirname(path), exist_ok=True) np.savetxt(path, data, delimiter=',', fmt='%.10f' if data.dtype == np.float64 else '%d') +def save_surface_mesh(out_dir, coords, connect): + connect = meshconv.enforce_mesh_convention( + meshconv.MeshData( + coords=np.ascontiguousarray(coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + ).connect["connect1"] + save_csv(f"{out_dir}/coords.csv", coords) + save_csv(f"{out_dir}/connect.csv", connect) + def get_nodes_for_elem(etype): return { "tri3": 3, @@ -68,8 +81,7 @@ def generate_fullscreen(etype, out_dir): else: connect = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8]]) else: connect = np.array([[0, 1, 2, 3]]) - save_csv(f"{out_dir}/coords.csv", coords) - save_csv(f"{out_dir}/connect.csv", connect) + save_surface_mesh(out_dir, coords, connect) save_csv(f"{out_dir}/field.csv", compute_rgb_fields(coords)) save_csv(f"{out_dir}/uvs.csv", compute_uvs(coords)) @@ -102,8 +114,7 @@ def generate_grid(etype, out_dir, N=320): q8 = [i0, i1, i2, i3, m01, m12, m23, m30] if etype == "quad9": q8.append(i0+(xn+1)+1) conn.append(q8) - save_csv(f"{out_dir}/coords.csv", coords) - save_csv(f"{out_dir}/connect.csv", np.array(conn)) + save_surface_mesh(out_dir, coords, np.array(conn)) save_csv(f"{out_dir}/field.csv", compute_rgb_fields(coords)) save_csv(f"{out_dir}/uvs.csv", compute_uvs(coords)) diff --git a/data/calplate/main_gen_calplate.py b/data/calplate/main_gen_calplate.py index ce63ce31..39d08dfc 100644 --- a/data/calplate/main_gen_calplate.py +++ b/data/calplate/main_gen_calplate.py @@ -8,6 +8,8 @@ from scipy.spatial.transform import Rotation from scipy.stats import qmc +from riley.python import meshconv + BASE_DIR = Path(__file__).resolve().parent @@ -445,11 +447,20 @@ def write_case( connect: np.ndarray, uvs: np.ndarray, states: list[MotionState], + enforce_convention: bool = False, ) -> None: out_dir = BASE_DIR / case_name out_dir.mkdir(parents=True, exist_ok=True) disp_x, disp_y, disp_z = displacement_fields(coords, states) + if enforce_convention: + connect = meshconv.enforce_mesh_convention( + meshconv.MeshData( + coords=np.ascontiguousarray(coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + ).connect["connect1"] save_csv_matrix(out_dir / "coords.csv", coords, "%.10f") save_csv_matrix(out_dir / "connect.csv", connect, "%d") @@ -478,7 +489,7 @@ def main() -> None: cases = mesh_cases() for case_name, (coords, connect, uvs) in cases.items(): - write_case(case_name, coords, connect, uvs, states) + write_case(case_name, coords, connect, uvs, states, enforce_convention=True) print(f"Generated {len(cases)} calplate mesh cases in {BASE_DIR}") print(f"Mode: {CAL_MODE}") diff --git a/data/edge/gen_data_rot.py b/data/edge/gen_data_rot.py index 59d8832d..f8fa72e5 100644 --- a/data/edge/gen_data_rot.py +++ b/data/edge/gen_data_rot.py @@ -2,10 +2,18 @@ import os from pathlib import Path +from riley.python import meshconv + # Coordinate System: Right-handed Cartesian (X right, Y up, Z towards viewer). # Vertex Winding: All elements MUST follow Counter-Clockwise (CCW) winding. def save_case(base_dir, name, coords, connect, disp_x, disp_y, disp_z): + mesh = meshconv.MeshData( + coords=np.ascontiguousarray(coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + connect = meshconv.enforce_mesh_convention(mesh).connect["connect1"] out_dir = Path(base_dir) / name out_dir.mkdir(parents=True, exist_ok=True) np.savetxt(out_dir / "coords.csv", coords, delimiter=",") diff --git a/data/edge/gen_distort_data.py b/data/edge/gen_distort_data.py index ad664be2..79cb484d 100644 --- a/data/edge/gen_distort_data.py +++ b/data/edge/gen_distort_data.py @@ -2,6 +2,8 @@ import numpy as np +from riley.python import meshconv + EDGE_LENG = 10.0 ELEM_ROT = 20.0 @@ -37,6 +39,12 @@ def save_case( disp_z, ELEM_ROT, ) + mesh = meshconv.MeshData( + coords=np.ascontiguousarray(coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + connect = meshconv.enforce_mesh_convention(mesh).connect["connect1"] np.savetxt(out_dir / "coords.csv", coords, delimiter=",") np.savetxt( out_dir / "connect.csv", diff --git a/data/edge/gen_stress_data.py b/data/edge/gen_stress_data.py index 5853e5de..588fee0c 100644 --- a/data/edge/gen_stress_data.py +++ b/data/edge/gen_stress_data.py @@ -1,6 +1,8 @@ import os import numpy as np +from riley.python import meshconv + def generate_stress_data(): path = "data/edge/tri6_stress" os.makedirs(path, exist_ok=True) @@ -43,6 +45,14 @@ def move_away(p, target, dist): m30_new = move_away(m30, c2, 1.0) nodes = [v0, v1, v2, v3, m01_new, m12_new, m20_new, m13_new, m30_new] + coords = np.asarray(nodes, dtype=np.float64) + connect = meshconv.enforce_mesh_convention( + meshconv.MeshData( + coords=coords, + connect={"connect1": np.array([[0, 1, 2, 4, 5, 6], [1, 0, 3, 4, 8, 7]], dtype=np.int64)}, + mesh_type="surface", + ) + ).connect["connect1"] # coords.csv with open(f"{path}/coords.csv", "w") as f: @@ -52,8 +62,7 @@ def move_away(p, target, dist): # connectivity.csv # Tri6: 0,1,2 corners, 3,4,5 midsides (0-1, 1-2, 2-0) with open(f"{path}/connectivity.csv", "w") as f: - f.write("0,1,2,4,5,6\n") # Tri 1 - f.write("1,0,3,4,8,7\n") # Tri 2 + np.savetxt(f, connect, delimiter=",", fmt="%d") # uvs.csv (rescale to be between 0.3 and 0.7) with open(f"{path}/uvs.csv", "w") as f: diff --git a/data/edge/gen_vertbulge_data.py b/data/edge/gen_vertbulge_data.py index 8131b1e8..45f02ddd 100644 --- a/data/edge/gen_vertbulge_data.py +++ b/data/edge/gen_vertbulge_data.py @@ -1,6 +1,8 @@ import os import numpy as np +from riley.python import meshconv + def generate_vertbulge_data(): path = "data/edge/tri6_vertbulge" os.makedirs(path, exist_ok=True) @@ -19,6 +21,14 @@ def generate_vertbulge_data(): m20 = np.array([0.0, 5.0, 0.0]) nodes = [v0, v1, v2, m01, m12, m20] + coords = np.asarray(nodes, dtype=np.float64) + connect = meshconv.enforce_mesh_convention( + meshconv.MeshData( + coords=coords, + connect={"connect1": np.array([[0, 1, 2, 3, 4, 5]], dtype=np.int64)}, + mesh_type="surface", + ) + ).connect["connect1"] # coords.csv with open(f"{path}/coords.csv", "w") as f: @@ -27,7 +37,7 @@ def generate_vertbulge_data(): # connectivity.csv with open(f"{path}/connectivity.csv", "w") as f: - f.write("0,1,2,3,4,5\n") + np.savetxt(f, connect, delimiter=",", fmt="%d") # uvs.csv (center them) with open(f"{path}/uvs.csv", "w") as f: diff --git a/data/simple/gendata.py b/data/simple/gendata.py index a9048384..501b8167 100644 --- a/data/simple/gendata.py +++ b/data/simple/gendata.py @@ -2,12 +2,20 @@ import os from pathlib import Path +from riley.python import meshconv + # Coordinate System: Right-handed Cartesian (X right, Y up, Z towards viewer). # Vertex Winding: All elements MUST follow Counter-Clockwise (CCW) winding. # This ensures positive signed area calculation in the rasterizer, which is # critical for correct shape function interpolation and weight distribution. def save_case(base_dir, name, coords, connect, disp_x, disp_y, disp_z): + mesh = meshconv.MeshData( + coords=np.ascontiguousarray(coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + connect = meshconv.enforce_mesh_convention(mesh).connect["connect1"] out_dir = Path(base_dir) / name out_dir.mkdir(parents=True, exist_ok=True) np.savetxt(out_dir / "coords.csv", coords, delimiter=",") diff --git a/data/small/gendata.py b/data/small/gendata.py index a9048384..501b8167 100644 --- a/data/small/gendata.py +++ b/data/small/gendata.py @@ -2,12 +2,20 @@ import os from pathlib import Path +from riley.python import meshconv + # Coordinate System: Right-handed Cartesian (X right, Y up, Z towards viewer). # Vertex Winding: All elements MUST follow Counter-Clockwise (CCW) winding. # This ensures positive signed area calculation in the rasterizer, which is # critical for correct shape function interpolation and weight distribution. def save_case(base_dir, name, coords, connect, disp_x, disp_y, disp_z): + mesh = meshconv.MeshData( + coords=np.ascontiguousarray(coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + connect = meshconv.enforce_mesh_convention(mesh).connect["connect1"] out_dir = Path(base_dir) / name out_dir.mkdir(parents=True, exist_ok=True) np.savetxt(out_dir / "coords.csv", coords, delimiter=",") diff --git a/data/tilt/gen_tilt_data.py b/data/tilt/gen_tilt_data.py index 2e769564..6607435e 100644 --- a/data/tilt/gen_tilt_data.py +++ b/data/tilt/gen_tilt_data.py @@ -1,6 +1,8 @@ import numpy as np import os +from riley.python import meshconv + def save_csv(path, data): os.makedirs(os.path.dirname(path), exist_ok=True) np.savetxt( @@ -108,6 +110,13 @@ def generate_fullscreen_tilt(etype, out_dir): connect = np.array([[0, 1, 2, 3]]) tilted_coords = apply_tilt(coords) + connect = meshconv.enforce_mesh_convention( + meshconv.MeshData( + coords=np.ascontiguousarray(tilted_coords, dtype=np.float64), + connect={"connect1": np.ascontiguousarray(connect, dtype=np.int64)}, + mesh_type="surface", + ) + ).connect["connect1"] save_csv(f"{out_dir}/coords.csv", tilted_coords) save_csv(f"{out_dir}/connect.csv", connect) save_csv(f"{out_dir}/field.csv", compute_rgb_fields(tilted_coords)) From 1e684b839f4d5a55fe34aa9198e74db869e861f8 Mon Sep 17 00:00:00 2001 From: ScepticalRabbit Date: Fri, 21 Aug 2026 14:54:55 +0100 Subject: [PATCH 11/38] Finished migration of min test suite to mesh convention --- data/min/quad4ibi_sphere200/connect.csv | 450 +++++++++--------- data/min/quad4newton_sphere200/connect.csv | 450 +++++++++--------- data/min/quad8_sphere200/connect.csv | 450 +++++++++--------- data/min/quad9_sphere200/connect.csv | 450 +++++++++--------- .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../quad8_nodal_grey/cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../quad9_nodal_grey/cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../quad8_nodal_grey/cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../quad9_nodal_grey/cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0.fimg | Bin 128015 -> 128015 bytes .../cam0_frame0_field0_rgb.fimg | Bin 384015 -> 384015 bytes src/dev_support/tests.zig | 5 + src/gen_gold_min.zig | 2 +- src/gengold/gen_gold_ssaa.zig | 13 + src/gengold/gen_gold_texfunc.zig | 2 +- 80 files changed, 920 insertions(+), 902 deletions(-) diff --git a/data/min/quad4ibi_sphere200/connect.csv b/data/min/quad4ibi_sphere200/connect.csv index 6e916021..983d7e8d 100644 --- a/data/min/quad4ibi_sphere200/connect.csv +++ b/data/min/quad4ibi_sphere200/connect.csv @@ -1,225 +1,225 @@ -0,1,17,16 -1,2,18,17 -2,3,19,18 -3,4,20,19 -4,5,21,20 -5,6,22,21 -6,7,23,22 -7,8,24,23 -8,9,25,24 -9,10,26,25 -10,11,27,26 -11,12,28,27 -12,13,29,28 -13,14,30,29 -14,15,31,30 -16,17,33,32 -17,18,34,33 -18,19,35,34 -19,20,36,35 -20,21,37,36 -21,22,38,37 -22,23,39,38 -23,24,40,39 -24,25,41,40 -25,26,42,41 -26,27,43,42 -27,28,44,43 -28,29,45,44 -29,30,46,45 -30,31,47,46 -32,33,49,48 -33,34,50,49 -34,35,51,50 -35,36,52,51 -36,37,53,52 -37,38,54,53 -38,39,55,54 -39,40,56,55 -40,41,57,56 -41,42,58,57 -42,43,59,58 -43,44,60,59 -44,45,61,60 -45,46,62,61 -46,47,63,62 -48,49,65,64 -49,50,66,65 -50,51,67,66 -51,52,68,67 -52,53,69,68 -53,54,70,69 -54,55,71,70 -55,56,72,71 -56,57,73,72 -57,58,74,73 -58,59,75,74 -59,60,76,75 -60,61,77,76 -61,62,78,77 -62,63,79,78 -64,65,81,80 -65,66,82,81 -66,67,83,82 -67,68,84,83 -68,69,85,84 -69,70,86,85 -70,71,87,86 -71,72,88,87 -72,73,89,88 -73,74,90,89 -74,75,91,90 -75,76,92,91 -76,77,93,92 -77,78,94,93 -78,79,95,94 -80,81,97,96 -81,82,98,97 -82,83,99,98 -83,84,100,99 -84,85,101,100 -85,86,102,101 -86,87,103,102 -87,88,104,103 -88,89,105,104 -89,90,106,105 -90,91,107,106 -91,92,108,107 -92,93,109,108 -93,94,110,109 -94,95,111,110 -96,97,113,112 -97,98,114,113 -98,99,115,114 -99,100,116,115 -100,101,117,116 -101,102,118,117 -102,103,119,118 -103,104,120,119 -104,105,121,120 -105,106,122,121 -106,107,123,122 -107,108,124,123 -108,109,125,124 -109,110,126,125 -110,111,127,126 -112,113,129,128 -113,114,130,129 -114,115,131,130 -115,116,132,131 -116,117,133,132 -117,118,134,133 -118,119,135,134 -119,120,136,135 -120,121,137,136 -121,122,138,137 -122,123,139,138 -123,124,140,139 -124,125,141,140 -125,126,142,141 -126,127,143,142 -128,129,145,144 -129,130,146,145 -130,131,147,146 -131,132,148,147 -132,133,149,148 -133,134,150,149 -134,135,151,150 -135,136,152,151 -136,137,153,152 -137,138,154,153 -138,139,155,154 -139,140,156,155 -140,141,157,156 -141,142,158,157 -142,143,159,158 -144,145,161,160 -145,146,162,161 -146,147,163,162 -147,148,164,163 -148,149,165,164 -149,150,166,165 -150,151,167,166 -151,152,168,167 -152,153,169,168 -153,154,170,169 -154,155,171,170 -155,156,172,171 -156,157,173,172 -157,158,174,173 -158,159,175,174 -160,161,177,176 -161,162,178,177 -162,163,179,178 -163,164,180,179 -164,165,181,180 -165,166,182,181 -166,167,183,182 -167,168,184,183 -168,169,185,184 -169,170,186,185 -170,171,187,186 -171,172,188,187 -172,173,189,188 -173,174,190,189 -174,175,191,190 -176,177,193,192 -177,178,194,193 -178,179,195,194 -179,180,196,195 -180,181,197,196 -181,182,198,197 -182,183,199,198 -183,184,200,199 -184,185,201,200 -185,186,202,201 -186,187,203,202 -187,188,204,203 -188,189,205,204 -189,190,206,205 -190,191,207,206 -192,193,209,208 -193,194,210,209 -194,195,211,210 -195,196,212,211 -196,197,213,212 -197,198,214,213 -198,199,215,214 -199,200,216,215 -200,201,217,216 -201,202,218,217 -202,203,219,218 -203,204,220,219 -204,205,221,220 -205,206,222,221 -206,207,223,222 -208,209,225,224 -209,210,226,225 -210,211,227,226 -211,212,228,227 -212,213,229,228 -213,214,230,229 -214,215,231,230 -215,216,232,231 -216,217,233,232 -217,218,234,233 -218,219,235,234 -219,220,236,235 -220,221,237,236 -221,222,238,237 -222,223,239,238 -224,225,241,240 -225,226,242,241 -226,227,243,242 -227,228,244,243 -228,229,245,244 -229,230,246,245 -230,231,247,246 -231,232,248,247 -232,233,249,248 -233,234,250,249 -234,235,251,250 -235,236,252,251 -236,237,253,252 -237,238,254,253 -238,239,255,254 +0,16,17,1 +1,17,18,2 +2,18,19,3 +3,19,20,4 +4,20,21,5 +5,21,22,6 +6,22,23,7 +7,23,24,8 +8,24,25,9 +9,25,26,10 +10,26,27,11 +11,27,28,12 +12,28,29,13 +13,29,30,14 +14,30,31,15 +16,32,33,17 +17,33,34,18 +18,34,35,19 +19,35,36,20 +20,36,37,21 +21,37,38,22 +22,38,39,23 +23,39,40,24 +24,40,41,25 +25,41,42,26 +26,42,43,27 +27,43,44,28 +28,44,45,29 +29,45,46,30 +30,46,47,31 +32,48,49,33 +33,49,50,34 +34,50,51,35 +35,51,52,36 +36,52,53,37 +37,53,54,38 +38,54,55,39 +39,55,56,40 +40,56,57,41 +41,57,58,42 +42,58,59,43 +43,59,60,44 +44,60,61,45 +45,61,62,46 +46,62,63,47 +48,64,65,49 +49,65,66,50 +50,66,67,51 +51,67,68,52 +52,68,69,53 +53,69,70,54 +54,70,71,55 +55,71,72,56 +56,72,73,57 +57,73,74,58 +58,74,75,59 +59,75,76,60 +60,76,77,61 +61,77,78,62 +62,78,79,63 +64,80,81,65 +65,81,82,66 +66,82,83,67 +67,83,84,68 +68,84,85,69 +69,85,86,70 +70,86,87,71 +71,87,88,72 +72,88,89,73 +73,89,90,74 +74,90,91,75 +75,91,92,76 +76,92,93,77 +77,93,94,78 +78,94,95,79 +80,96,97,81 +81,97,98,82 +82,98,99,83 +83,99,100,84 +84,100,101,85 +85,101,102,86 +86,102,103,87 +87,103,104,88 +88,104,105,89 +89,105,106,90 +90,106,107,91 +91,107,108,92 +92,108,109,93 +93,109,110,94 +94,110,111,95 +96,112,113,97 +97,113,114,98 +98,114,115,99 +99,115,116,100 +100,116,117,101 +101,117,118,102 +102,118,119,103 +103,119,120,104 +104,120,121,105 +105,121,122,106 +106,122,123,107 +107,123,124,108 +108,124,125,109 +109,125,126,110 +110,126,127,111 +112,128,129,113 +113,129,130,114 +114,130,131,115 +115,131,132,116 +116,132,133,117 +117,133,134,118 +118,134,135,119 +119,135,136,120 +120,136,137,121 +121,137,138,122 +122,138,139,123 +123,139,140,124 +124,140,141,125 +125,141,142,126 +126,142,143,127 +128,144,145,129 +129,145,146,130 +130,146,147,131 +131,147,148,132 +132,148,149,133 +133,149,150,134 +134,150,151,135 +135,151,152,136 +136,152,153,137 +137,153,154,138 +138,154,155,139 +139,155,156,140 +140,156,157,141 +141,157,158,142 +142,158,159,143 +144,160,161,145 +145,161,162,146 +146,162,163,147 +147,163,164,148 +148,164,165,149 +149,165,166,150 +150,166,167,151 +151,167,168,152 +152,168,169,153 +153,169,170,154 +154,170,171,155 +155,171,172,156 +156,172,173,157 +157,173,174,158 +158,174,175,159 +160,176,177,161 +161,177,178,162 +162,178,179,163 +163,179,180,164 +164,180,181,165 +165,181,182,166 +166,182,183,167 +167,183,184,168 +168,184,185,169 +169,185,186,170 +170,186,187,171 +171,187,188,172 +172,188,189,173 +173,189,190,174 +174,190,191,175 +176,192,193,177 +177,193,194,178 +178,194,195,179 +179,195,196,180 +180,196,197,181 +181,197,198,182 +182,198,199,183 +183,199,200,184 +184,200,201,185 +185,201,202,186 +186,202,203,187 +187,203,204,188 +188,204,205,189 +189,205,206,190 +190,206,207,191 +192,208,209,193 +193,209,210,194 +194,210,211,195 +195,211,212,196 +196,212,213,197 +197,213,214,198 +198,214,215,199 +199,215,216,200 +200,216,217,201 +201,217,218,202 +202,218,219,203 +203,219,220,204 +204,220,221,205 +205,221,222,206 +206,222,223,207 +208,224,225,209 +209,225,226,210 +210,226,227,211 +211,227,228,212 +212,228,229,213 +213,229,230,214 +214,230,231,215 +215,231,232,216 +216,232,233,217 +217,233,234,218 +218,234,235,219 +219,235,236,220 +220,236,237,221 +221,237,238,222 +222,238,239,223 +224,240,241,225 +225,241,242,226 +226,242,243,227 +227,243,244,228 +228,244,245,229 +229,245,246,230 +230,246,247,231 +231,247,248,232 +232,248,249,233 +233,249,250,234 +234,250,251,235 +235,251,252,236 +236,252,253,237 +237,253,254,238 +238,254,255,239 diff --git a/data/min/quad4newton_sphere200/connect.csv b/data/min/quad4newton_sphere200/connect.csv index 6e916021..983d7e8d 100644 --- a/data/min/quad4newton_sphere200/connect.csv +++ b/data/min/quad4newton_sphere200/connect.csv @@ -1,225 +1,225 @@ -0,1,17,16 -1,2,18,17 -2,3,19,18 -3,4,20,19 -4,5,21,20 -5,6,22,21 -6,7,23,22 -7,8,24,23 -8,9,25,24 -9,10,26,25 -10,11,27,26 -11,12,28,27 -12,13,29,28 -13,14,30,29 -14,15,31,30 -16,17,33,32 -17,18,34,33 -18,19,35,34 -19,20,36,35 -20,21,37,36 -21,22,38,37 -22,23,39,38 -23,24,40,39 -24,25,41,40 -25,26,42,41 -26,27,43,42 -27,28,44,43 -28,29,45,44 -29,30,46,45 -30,31,47,46 -32,33,49,48 -33,34,50,49 -34,35,51,50 -35,36,52,51 -36,37,53,52 -37,38,54,53 -38,39,55,54 -39,40,56,55 -40,41,57,56 -41,42,58,57 -42,43,59,58 -43,44,60,59 -44,45,61,60 -45,46,62,61 -46,47,63,62 -48,49,65,64 -49,50,66,65 -50,51,67,66 -51,52,68,67 -52,53,69,68 -53,54,70,69 -54,55,71,70 -55,56,72,71 -56,57,73,72 -57,58,74,73 -58,59,75,74 -59,60,76,75 -60,61,77,76 -61,62,78,77 -62,63,79,78 -64,65,81,80 -65,66,82,81 -66,67,83,82 -67,68,84,83 -68,69,85,84 -69,70,86,85 -70,71,87,86 -71,72,88,87 -72,73,89,88 -73,74,90,89 -74,75,91,90 -75,76,92,91 -76,77,93,92 -77,78,94,93 -78,79,95,94 -80,81,97,96 -81,82,98,97 -82,83,99,98 -83,84,100,99 -84,85,101,100 -85,86,102,101 -86,87,103,102 -87,88,104,103 -88,89,105,104 -89,90,106,105 -90,91,107,106 -91,92,108,107 -92,93,109,108 -93,94,110,109 -94,95,111,110 -96,97,113,112 -97,98,114,113 -98,99,115,114 -99,100,116,115 -100,101,117,116 -101,102,118,117 -102,103,119,118 -103,104,120,119 -104,105,121,120 -105,106,122,121 -106,107,123,122 -107,108,124,123 -108,109,125,124 -109,110,126,125 -110,111,127,126 -112,113,129,128 -113,114,130,129 -114,115,131,130 -115,116,132,131 -116,117,133,132 -117,118,134,133 -118,119,135,134 -119,120,136,135 -120,121,137,136 -121,122,138,137 -122,123,139,138 -123,124,140,139 -124,125,141,140 -125,126,142,141 -126,127,143,142 -128,129,145,144 -129,130,146,145 -130,131,147,146 -131,132,148,147 -132,133,149,148 -133,134,150,149 -134,135,151,150 -135,136,152,151 -136,137,153,152 -137,138,154,153 -138,139,155,154 -139,140,156,155 -140,141,157,156 -141,142,158,157 -142,143,159,158 -144,145,161,160 -145,146,162,161 -146,147,163,162 -147,148,164,163 -148,149,165,164 -149,150,166,165 -150,151,167,166 -151,152,168,167 -152,153,169,168 -153,154,170,169 -154,155,171,170 -155,156,172,171 -156,157,173,172 -157,158,174,173 -158,159,175,174 -160,161,177,176 -161,162,178,177 -162,163,179,178 -163,164,180,179 -164,165,181,180 -165,166,182,181 -166,167,183,182 -167,168,184,183 -168,169,185,184 -169,170,186,185 -170,171,187,186 -171,172,188,187 -172,173,189,188 -173,174,190,189 -174,175,191,190 -176,177,193,192 -177,178,194,193 -178,179,195,194 -179,180,196,195 -180,181,197,196 -181,182,198,197 -182,183,199,198 -183,184,200,199 -184,185,201,200 -185,186,202,201 -186,187,203,202 -187,188,204,203 -188,189,205,204 -189,190,206,205 -190,191,207,206 -192,193,209,208 -193,194,210,209 -194,195,211,210 -195,196,212,211 -196,197,213,212 -197,198,214,213 -198,199,215,214 -199,200,216,215 -200,201,217,216 -201,202,218,217 -202,203,219,218 -203,204,220,219 -204,205,221,220 -205,206,222,221 -206,207,223,222 -208,209,225,224 -209,210,226,225 -210,211,227,226 -211,212,228,227 -212,213,229,228 -213,214,230,229 -214,215,231,230 -215,216,232,231 -216,217,233,232 -217,218,234,233 -218,219,235,234 -219,220,236,235 -220,221,237,236 -221,222,238,237 -222,223,239,238 -224,225,241,240 -225,226,242,241 -226,227,243,242 -227,228,244,243 -228,229,245,244 -229,230,246,245 -230,231,247,246 -231,232,248,247 -232,233,249,248 -233,234,250,249 -234,235,251,250 -235,236,252,251 -236,237,253,252 -237,238,254,253 -238,239,255,254 +0,16,17,1 +1,17,18,2 +2,18,19,3 +3,19,20,4 +4,20,21,5 +5,21,22,6 +6,22,23,7 +7,23,24,8 +8,24,25,9 +9,25,26,10 +10,26,27,11 +11,27,28,12 +12,28,29,13 +13,29,30,14 +14,30,31,15 +16,32,33,17 +17,33,34,18 +18,34,35,19 +19,35,36,20 +20,36,37,21 +21,37,38,22 +22,38,39,23 +23,39,40,24 +24,40,41,25 +25,41,42,26 +26,42,43,27 +27,43,44,28 +28,44,45,29 +29,45,46,30 +30,46,47,31 +32,48,49,33 +33,49,50,34 +34,50,51,35 +35,51,52,36 +36,52,53,37 +37,53,54,38 +38,54,55,39 +39,55,56,40 +40,56,57,41 +41,57,58,42 +42,58,59,43 +43,59,60,44 +44,60,61,45 +45,61,62,46 +46,62,63,47 +48,64,65,49 +49,65,66,50 +50,66,67,51 +51,67,68,52 +52,68,69,53 +53,69,70,54 +54,70,71,55 +55,71,72,56 +56,72,73,57 +57,73,74,58 +58,74,75,59 +59,75,76,60 +60,76,77,61 +61,77,78,62 +62,78,79,63 +64,80,81,65 +65,81,82,66 +66,82,83,67 +67,83,84,68 +68,84,85,69 +69,85,86,70 +70,86,87,71 +71,87,88,72 +72,88,89,73 +73,89,90,74 +74,90,91,75 +75,91,92,76 +76,92,93,77 +77,93,94,78 +78,94,95,79 +80,96,97,81 +81,97,98,82 +82,98,99,83 +83,99,100,84 +84,100,101,85 +85,101,102,86 +86,102,103,87 +87,103,104,88 +88,104,105,89 +89,105,106,90 +90,106,107,91 +91,107,108,92 +92,108,109,93 +93,109,110,94 +94,110,111,95 +96,112,113,97 +97,113,114,98 +98,114,115,99 +99,115,116,100 +100,116,117,101 +101,117,118,102 +102,118,119,103 +103,119,120,104 +104,120,121,105 +105,121,122,106 +106,122,123,107 +107,123,124,108 +108,124,125,109 +109,125,126,110 +110,126,127,111 +112,128,129,113 +113,129,130,114 +114,130,131,115 +115,131,132,116 +116,132,133,117 +117,133,134,118 +118,134,135,119 +119,135,136,120 +120,136,137,121 +121,137,138,122 +122,138,139,123 +123,139,140,124 +124,140,141,125 +125,141,142,126 +126,142,143,127 +128,144,145,129 +129,145,146,130 +130,146,147,131 +131,147,148,132 +132,148,149,133 +133,149,150,134 +134,150,151,135 +135,151,152,136 +136,152,153,137 +137,153,154,138 +138,154,155,139 +139,155,156,140 +140,156,157,141 +141,157,158,142 +142,158,159,143 +144,160,161,145 +145,161,162,146 +146,162,163,147 +147,163,164,148 +148,164,165,149 +149,165,166,150 +150,166,167,151 +151,167,168,152 +152,168,169,153 +153,169,170,154 +154,170,171,155 +155,171,172,156 +156,172,173,157 +157,173,174,158 +158,174,175,159 +160,176,177,161 +161,177,178,162 +162,178,179,163 +163,179,180,164 +164,180,181,165 +165,181,182,166 +166,182,183,167 +167,183,184,168 +168,184,185,169 +169,185,186,170 +170,186,187,171 +171,187,188,172 +172,188,189,173 +173,189,190,174 +174,190,191,175 +176,192,193,177 +177,193,194,178 +178,194,195,179 +179,195,196,180 +180,196,197,181 +181,197,198,182 +182,198,199,183 +183,199,200,184 +184,200,201,185 +185,201,202,186 +186,202,203,187 +187,203,204,188 +188,204,205,189 +189,205,206,190 +190,206,207,191 +192,208,209,193 +193,209,210,194 +194,210,211,195 +195,211,212,196 +196,212,213,197 +197,213,214,198 +198,214,215,199 +199,215,216,200 +200,216,217,201 +201,217,218,202 +202,218,219,203 +203,219,220,204 +204,220,221,205 +205,221,222,206 +206,222,223,207 +208,224,225,209 +209,225,226,210 +210,226,227,211 +211,227,228,212 +212,228,229,213 +213,229,230,214 +214,230,231,215 +215,231,232,216 +216,232,233,217 +217,233,234,218 +218,234,235,219 +219,235,236,220 +220,236,237,221 +221,237,238,222 +222,238,239,223 +224,240,241,225 +225,241,242,226 +226,242,243,227 +227,243,244,228 +228,244,245,229 +229,245,246,230 +230,246,247,231 +231,247,248,232 +232,248,249,233 +233,249,250,234 +234,250,251,235 +235,251,252,236 +236,252,253,237 +237,253,254,238 +238,254,255,239 diff --git a/data/min/quad8_sphere200/connect.csv b/data/min/quad8_sphere200/connect.csv index 6ce07ff1..7718f4c5 100644 --- a/data/min/quad8_sphere200/connect.csv +++ b/data/min/quad8_sphere200/connect.csv @@ -1,225 +1,225 @@ -0,2,64,62,1,33,63,31 -2,4,66,64,3,35,65,33 -4,6,68,66,5,37,67,35 -6,8,70,68,7,39,69,37 -8,10,72,70,9,41,71,39 -10,12,74,72,11,43,73,41 -12,14,76,74,13,45,75,43 -14,16,78,76,15,47,77,45 -16,18,80,78,17,49,79,47 -18,20,82,80,19,51,81,49 -20,22,84,82,21,53,83,51 -22,24,86,84,23,55,85,53 -24,26,88,86,25,57,87,55 -26,28,90,88,27,59,89,57 -28,30,92,90,29,61,91,59 -62,64,126,124,63,95,125,93 -64,66,128,126,65,97,127,95 -66,68,130,128,67,99,129,97 -68,70,132,130,69,101,131,99 -70,72,134,132,71,103,133,101 -72,74,136,134,73,105,135,103 -74,76,138,136,75,107,137,105 -76,78,140,138,77,109,139,107 -78,80,142,140,79,111,141,109 -80,82,144,142,81,113,143,111 -82,84,146,144,83,115,145,113 -84,86,148,146,85,117,147,115 -86,88,150,148,87,119,149,117 -88,90,152,150,89,121,151,119 -90,92,154,152,91,123,153,121 -124,126,188,186,125,157,187,155 -126,128,190,188,127,159,189,157 -128,130,192,190,129,161,191,159 -130,132,194,192,131,163,193,161 -132,134,196,194,133,165,195,163 -134,136,198,196,135,167,197,165 -136,138,200,198,137,169,199,167 -138,140,202,200,139,171,201,169 -140,142,204,202,141,173,203,171 -142,144,206,204,143,175,205,173 -144,146,208,206,145,177,207,175 -146,148,210,208,147,179,209,177 -148,150,212,210,149,181,211,179 -150,152,214,212,151,183,213,181 -152,154,216,214,153,185,215,183 -186,188,250,248,187,219,249,217 -188,190,252,250,189,221,251,219 -190,192,254,252,191,223,253,221 -192,194,256,254,193,225,255,223 -194,196,258,256,195,227,257,225 -196,198,260,258,197,229,259,227 -198,200,262,260,199,231,261,229 -200,202,264,262,201,233,263,231 -202,204,266,264,203,235,265,233 -204,206,268,266,205,237,267,235 -206,208,270,268,207,239,269,237 -208,210,272,270,209,241,271,239 -210,212,274,272,211,243,273,241 -212,214,276,274,213,245,275,243 -214,216,278,276,215,247,277,245 -248,250,312,310,249,281,311,279 -250,252,314,312,251,283,313,281 -252,254,316,314,253,285,315,283 -254,256,318,316,255,287,317,285 -256,258,320,318,257,289,319,287 -258,260,322,320,259,291,321,289 -260,262,324,322,261,293,323,291 -262,264,326,324,263,295,325,293 -264,266,328,326,265,297,327,295 -266,268,330,328,267,299,329,297 -268,270,332,330,269,301,331,299 -270,272,334,332,271,303,333,301 -272,274,336,334,273,305,335,303 -274,276,338,336,275,307,337,305 -276,278,340,338,277,309,339,307 -310,312,374,372,311,343,373,341 -312,314,376,374,313,345,375,343 -314,316,378,376,315,347,377,345 -316,318,380,378,317,349,379,347 -318,320,382,380,319,351,381,349 -320,322,384,382,321,353,383,351 -322,324,386,384,323,355,385,353 -324,326,388,386,325,357,387,355 -326,328,390,388,327,359,389,357 -328,330,392,390,329,361,391,359 -330,332,394,392,331,363,393,361 -332,334,396,394,333,365,395,363 -334,336,398,396,335,367,397,365 -336,338,400,398,337,369,399,367 -338,340,402,400,339,371,401,369 -372,374,436,434,373,405,435,403 -374,376,438,436,375,407,437,405 -376,378,440,438,377,409,439,407 -378,380,442,440,379,411,441,409 -380,382,444,442,381,413,443,411 -382,384,446,444,383,415,445,413 -384,386,448,446,385,417,447,415 -386,388,450,448,387,419,449,417 -388,390,452,450,389,421,451,419 -390,392,454,452,391,423,453,421 -392,394,456,454,393,425,455,423 -394,396,458,456,395,427,457,425 -396,398,460,458,397,429,459,427 -398,400,462,460,399,431,461,429 -400,402,464,462,401,433,463,431 -434,436,498,496,435,467,497,465 -436,438,500,498,437,469,499,467 -438,440,502,500,439,471,501,469 -440,442,504,502,441,473,503,471 -442,444,506,504,443,475,505,473 -444,446,508,506,445,477,507,475 -446,448,510,508,447,479,509,477 -448,450,512,510,449,481,511,479 -450,452,514,512,451,483,513,481 -452,454,516,514,453,485,515,483 -454,456,518,516,455,487,517,485 -456,458,520,518,457,489,519,487 -458,460,522,520,459,491,521,489 -460,462,524,522,461,493,523,491 -462,464,526,524,463,495,525,493 -496,498,560,558,497,529,559,527 -498,500,562,560,499,531,561,529 -500,502,564,562,501,533,563,531 -502,504,566,564,503,535,565,533 -504,506,568,566,505,537,567,535 -506,508,570,568,507,539,569,537 -508,510,572,570,509,541,571,539 -510,512,574,572,511,543,573,541 -512,514,576,574,513,545,575,543 -514,516,578,576,515,547,577,545 -516,518,580,578,517,549,579,547 -518,520,582,580,519,551,581,549 -520,522,584,582,521,553,583,551 -522,524,586,584,523,555,585,553 -524,526,588,586,525,557,587,555 -558,560,622,620,559,591,621,589 -560,562,624,622,561,593,623,591 -562,564,626,624,563,595,625,593 -564,566,628,626,565,597,627,595 -566,568,630,628,567,599,629,597 -568,570,632,630,569,601,631,599 -570,572,634,632,571,603,633,601 -572,574,636,634,573,605,635,603 -574,576,638,636,575,607,637,605 -576,578,640,638,577,609,639,607 -578,580,642,640,579,611,641,609 -580,582,644,642,581,613,643,611 -582,584,646,644,583,615,645,613 -584,586,648,646,585,617,647,615 -586,588,650,648,587,619,649,617 -620,622,684,682,621,653,683,651 -622,624,686,684,623,655,685,653 -624,626,688,686,625,657,687,655 -626,628,690,688,627,659,689,657 -628,630,692,690,629,661,691,659 -630,632,694,692,631,663,693,661 -632,634,696,694,633,665,695,663 -634,636,698,696,635,667,697,665 -636,638,700,698,637,669,699,667 -638,640,702,700,639,671,701,669 -640,642,704,702,641,673,703,671 -642,644,706,704,643,675,705,673 -644,646,708,706,645,677,707,675 -646,648,710,708,647,679,709,677 -648,650,712,710,649,681,711,679 -682,684,746,744,683,715,745,713 -684,686,748,746,685,717,747,715 -686,688,750,748,687,719,749,717 -688,690,752,750,689,721,751,719 -690,692,754,752,691,723,753,721 -692,694,756,754,693,725,755,723 -694,696,758,756,695,727,757,725 -696,698,760,758,697,729,759,727 -698,700,762,760,699,731,761,729 -700,702,764,762,701,733,763,731 -702,704,766,764,703,735,765,733 -704,706,768,766,705,737,767,735 -706,708,770,768,707,739,769,737 -708,710,772,770,709,741,771,739 -710,712,774,772,711,743,773,741 -744,746,808,806,745,777,807,775 -746,748,810,808,747,779,809,777 -748,750,812,810,749,781,811,779 -750,752,814,812,751,783,813,781 -752,754,816,814,753,785,815,783 -754,756,818,816,755,787,817,785 -756,758,820,818,757,789,819,787 -758,760,822,820,759,791,821,789 -760,762,824,822,761,793,823,791 -762,764,826,824,763,795,825,793 -764,766,828,826,765,797,827,795 -766,768,830,828,767,799,829,797 -768,770,832,830,769,801,831,799 -770,772,834,832,771,803,833,801 -772,774,836,834,773,805,835,803 -806,808,870,868,807,839,869,837 -808,810,872,870,809,841,871,839 -810,812,874,872,811,843,873,841 -812,814,876,874,813,845,875,843 -814,816,878,876,815,847,877,845 -816,818,880,878,817,849,879,847 -818,820,882,880,819,851,881,849 -820,822,884,882,821,853,883,851 -822,824,886,884,823,855,885,853 -824,826,888,886,825,857,887,855 -826,828,890,888,827,859,889,857 -828,830,892,890,829,861,891,859 -830,832,894,892,831,863,893,861 -832,834,896,894,833,865,895,863 -834,836,898,896,835,867,897,865 -868,870,932,930,869,901,931,899 -870,872,934,932,871,903,933,901 -872,874,936,934,873,905,935,903 -874,876,938,936,875,907,937,905 -876,878,940,938,877,909,939,907 -878,880,942,940,879,911,941,909 -880,882,944,942,881,913,943,911 -882,884,946,944,883,915,945,913 -884,886,948,946,885,917,947,915 -886,888,950,948,887,919,949,917 -888,890,952,950,889,921,951,919 -890,892,954,952,891,923,953,921 -892,894,956,954,893,925,955,923 -894,896,958,956,895,927,957,925 -896,898,960,958,897,929,959,927 +0,62,64,2,31,63,33,1 +2,64,66,4,33,65,35,3 +4,66,68,6,35,67,37,5 +6,68,70,8,37,69,39,7 +8,70,72,10,39,71,41,9 +10,72,74,12,41,73,43,11 +12,74,76,14,43,75,45,13 +14,76,78,16,45,77,47,15 +16,78,80,18,47,79,49,17 +18,80,82,20,49,81,51,19 +20,82,84,22,51,83,53,21 +22,84,86,24,53,85,55,23 +24,86,88,26,55,87,57,25 +26,88,90,28,57,89,59,27 +28,90,92,30,59,91,61,29 +62,124,126,64,93,125,95,63 +64,126,128,66,95,127,97,65 +66,128,130,68,97,129,99,67 +68,130,132,70,99,131,101,69 +70,132,134,72,101,133,103,71 +72,134,136,74,103,135,105,73 +74,136,138,76,105,137,107,75 +76,138,140,78,107,139,109,77 +78,140,142,80,109,141,111,79 +80,142,144,82,111,143,113,81 +82,144,146,84,113,145,115,83 +84,146,148,86,115,147,117,85 +86,148,150,88,117,149,119,87 +88,150,152,90,119,151,121,89 +90,152,154,92,121,153,123,91 +124,186,188,126,155,187,157,125 +126,188,190,128,157,189,159,127 +128,190,192,130,159,191,161,129 +130,192,194,132,161,193,163,131 +132,194,196,134,163,195,165,133 +134,196,198,136,165,197,167,135 +136,198,200,138,167,199,169,137 +138,200,202,140,169,201,171,139 +140,202,204,142,171,203,173,141 +142,204,206,144,173,205,175,143 +144,206,208,146,175,207,177,145 +146,208,210,148,177,209,179,147 +148,210,212,150,179,211,181,149 +150,212,214,152,181,213,183,151 +152,214,216,154,183,215,185,153 +186,248,250,188,217,249,219,187 +188,250,252,190,219,251,221,189 +190,252,254,192,221,253,223,191 +192,254,256,194,223,255,225,193 +194,256,258,196,225,257,227,195 +196,258,260,198,227,259,229,197 +198,260,262,200,229,261,231,199 +200,262,264,202,231,263,233,201 +202,264,266,204,233,265,235,203 +204,266,268,206,235,267,237,205 +206,268,270,208,237,269,239,207 +208,270,272,210,239,271,241,209 +210,272,274,212,241,273,243,211 +212,274,276,214,243,275,245,213 +214,276,278,216,245,277,247,215 +248,310,312,250,279,311,281,249 +250,312,314,252,281,313,283,251 +252,314,316,254,283,315,285,253 +254,316,318,256,285,317,287,255 +256,318,320,258,287,319,289,257 +258,320,322,260,289,321,291,259 +260,322,324,262,291,323,293,261 +262,324,326,264,293,325,295,263 +264,326,328,266,295,327,297,265 +266,328,330,268,297,329,299,267 +268,330,332,270,299,331,301,269 +270,332,334,272,301,333,303,271 +272,334,336,274,303,335,305,273 +274,336,338,276,305,337,307,275 +276,338,340,278,307,339,309,277 +310,372,374,312,341,373,343,311 +312,374,376,314,343,375,345,313 +314,376,378,316,345,377,347,315 +316,378,380,318,347,379,349,317 +318,380,382,320,349,381,351,319 +320,382,384,322,351,383,353,321 +322,384,386,324,353,385,355,323 +324,386,388,326,355,387,357,325 +326,388,390,328,357,389,359,327 +328,390,392,330,359,391,361,329 +330,392,394,332,361,393,363,331 +332,394,396,334,363,395,365,333 +334,396,398,336,365,397,367,335 +336,398,400,338,367,399,369,337 +338,400,402,340,369,401,371,339 +372,434,436,374,403,435,405,373 +374,436,438,376,405,437,407,375 +376,438,440,378,407,439,409,377 +378,440,442,380,409,441,411,379 +380,442,444,382,411,443,413,381 +382,444,446,384,413,445,415,383 +384,446,448,386,415,447,417,385 +386,448,450,388,417,449,419,387 +388,450,452,390,419,451,421,389 +390,452,454,392,421,453,423,391 +392,454,456,394,423,455,425,393 +394,456,458,396,425,457,427,395 +396,458,460,398,427,459,429,397 +398,460,462,400,429,461,431,399 +400,462,464,402,431,463,433,401 +434,496,498,436,465,497,467,435 +436,498,500,438,467,499,469,437 +438,500,502,440,469,501,471,439 +440,502,504,442,471,503,473,441 +442,504,506,444,473,505,475,443 +444,506,508,446,475,507,477,445 +446,508,510,448,477,509,479,447 +448,510,512,450,479,511,481,449 +450,512,514,452,481,513,483,451 +452,514,516,454,483,515,485,453 +454,516,518,456,485,517,487,455 +456,518,520,458,487,519,489,457 +458,520,522,460,489,521,491,459 +460,522,524,462,491,523,493,461 +462,524,526,464,493,525,495,463 +496,558,560,498,527,559,529,497 +498,560,562,500,529,561,531,499 +500,562,564,502,531,563,533,501 +502,564,566,504,533,565,535,503 +504,566,568,506,535,567,537,505 +506,568,570,508,537,569,539,507 +508,570,572,510,539,571,541,509 +510,572,574,512,541,573,543,511 +512,574,576,514,543,575,545,513 +514,576,578,516,545,577,547,515 +516,578,580,518,547,579,549,517 +518,580,582,520,549,581,551,519 +520,582,584,522,551,583,553,521 +522,584,586,524,553,585,555,523 +524,586,588,526,555,587,557,525 +558,620,622,560,589,621,591,559 +560,622,624,562,591,623,593,561 +562,624,626,564,593,625,595,563 +564,626,628,566,595,627,597,565 +566,628,630,568,597,629,599,567 +568,630,632,570,599,631,601,569 +570,632,634,572,601,633,603,571 +572,634,636,574,603,635,605,573 +574,636,638,576,605,637,607,575 +576,638,640,578,607,639,609,577 +578,640,642,580,609,641,611,579 +580,642,644,582,611,643,613,581 +582,644,646,584,613,645,615,583 +584,646,648,586,615,647,617,585 +586,648,650,588,617,649,619,587 +620,682,684,622,651,683,653,621 +622,684,686,624,653,685,655,623 +624,686,688,626,655,687,657,625 +626,688,690,628,657,689,659,627 +628,690,692,630,659,691,661,629 +630,692,694,632,661,693,663,631 +632,694,696,634,663,695,665,633 +634,696,698,636,665,697,667,635 +636,698,700,638,667,699,669,637 +638,700,702,640,669,701,671,639 +640,702,704,642,671,703,673,641 +642,704,706,644,673,705,675,643 +644,706,708,646,675,707,677,645 +646,708,710,648,677,709,679,647 +648,710,712,650,679,711,681,649 +682,744,746,684,713,745,715,683 +684,746,748,686,715,747,717,685 +686,748,750,688,717,749,719,687 +688,750,752,690,719,751,721,689 +690,752,754,692,721,753,723,691 +692,754,756,694,723,755,725,693 +694,756,758,696,725,757,727,695 +696,758,760,698,727,759,729,697 +698,760,762,700,729,761,731,699 +700,762,764,702,731,763,733,701 +702,764,766,704,733,765,735,703 +704,766,768,706,735,767,737,705 +706,768,770,708,737,769,739,707 +708,770,772,710,739,771,741,709 +710,772,774,712,741,773,743,711 +744,806,808,746,775,807,777,745 +746,808,810,748,777,809,779,747 +748,810,812,750,779,811,781,749 +750,812,814,752,781,813,783,751 +752,814,816,754,783,815,785,753 +754,816,818,756,785,817,787,755 +756,818,820,758,787,819,789,757 +758,820,822,760,789,821,791,759 +760,822,824,762,791,823,793,761 +762,824,826,764,793,825,795,763 +764,826,828,766,795,827,797,765 +766,828,830,768,797,829,799,767 +768,830,832,770,799,831,801,769 +770,832,834,772,801,833,803,771 +772,834,836,774,803,835,805,773 +806,868,870,808,837,869,839,807 +808,870,872,810,839,871,841,809 +810,872,874,812,841,873,843,811 +812,874,876,814,843,875,845,813 +814,876,878,816,845,877,847,815 +816,878,880,818,847,879,849,817 +818,880,882,820,849,881,851,819 +820,882,884,822,851,883,853,821 +822,884,886,824,853,885,855,823 +824,886,888,826,855,887,857,825 +826,888,890,828,857,889,859,827 +828,890,892,830,859,891,861,829 +830,892,894,832,861,893,863,831 +832,894,896,834,863,895,865,833 +834,896,898,836,865,897,867,835 +868,930,932,870,899,931,901,869 +870,932,934,872,901,933,903,871 +872,934,936,874,903,935,905,873 +874,936,938,876,905,937,907,875 +876,938,940,878,907,939,909,877 +878,940,942,880,909,941,911,879 +880,942,944,882,911,943,913,881 +882,944,946,884,913,945,915,883 +884,946,948,886,915,947,917,885 +886,948,950,888,917,949,919,887 +888,950,952,890,919,951,921,889 +890,952,954,892,921,953,923,891 +892,954,956,894,923,955,925,893 +894,956,958,896,925,957,927,895 +896,958,960,898,927,959,929,897 diff --git a/data/min/quad9_sphere200/connect.csv b/data/min/quad9_sphere200/connect.csv index 8770e9af..86563b91 100644 --- a/data/min/quad9_sphere200/connect.csv +++ b/data/min/quad9_sphere200/connect.csv @@ -1,225 +1,225 @@ -0,2,64,62,1,33,63,31,32 -2,4,66,64,3,35,65,33,34 -4,6,68,66,5,37,67,35,36 -6,8,70,68,7,39,69,37,38 -8,10,72,70,9,41,71,39,40 -10,12,74,72,11,43,73,41,42 -12,14,76,74,13,45,75,43,44 -14,16,78,76,15,47,77,45,46 -16,18,80,78,17,49,79,47,48 -18,20,82,80,19,51,81,49,50 -20,22,84,82,21,53,83,51,52 -22,24,86,84,23,55,85,53,54 -24,26,88,86,25,57,87,55,56 -26,28,90,88,27,59,89,57,58 -28,30,92,90,29,61,91,59,60 -62,64,126,124,63,95,125,93,94 -64,66,128,126,65,97,127,95,96 -66,68,130,128,67,99,129,97,98 -68,70,132,130,69,101,131,99,100 -70,72,134,132,71,103,133,101,102 -72,74,136,134,73,105,135,103,104 -74,76,138,136,75,107,137,105,106 -76,78,140,138,77,109,139,107,108 -78,80,142,140,79,111,141,109,110 -80,82,144,142,81,113,143,111,112 -82,84,146,144,83,115,145,113,114 -84,86,148,146,85,117,147,115,116 -86,88,150,148,87,119,149,117,118 -88,90,152,150,89,121,151,119,120 -90,92,154,152,91,123,153,121,122 -124,126,188,186,125,157,187,155,156 -126,128,190,188,127,159,189,157,158 -128,130,192,190,129,161,191,159,160 -130,132,194,192,131,163,193,161,162 -132,134,196,194,133,165,195,163,164 -134,136,198,196,135,167,197,165,166 -136,138,200,198,137,169,199,167,168 -138,140,202,200,139,171,201,169,170 -140,142,204,202,141,173,203,171,172 -142,144,206,204,143,175,205,173,174 -144,146,208,206,145,177,207,175,176 -146,148,210,208,147,179,209,177,178 -148,150,212,210,149,181,211,179,180 -150,152,214,212,151,183,213,181,182 -152,154,216,214,153,185,215,183,184 -186,188,250,248,187,219,249,217,218 -188,190,252,250,189,221,251,219,220 -190,192,254,252,191,223,253,221,222 -192,194,256,254,193,225,255,223,224 -194,196,258,256,195,227,257,225,226 -196,198,260,258,197,229,259,227,228 -198,200,262,260,199,231,261,229,230 -200,202,264,262,201,233,263,231,232 -202,204,266,264,203,235,265,233,234 -204,206,268,266,205,237,267,235,236 -206,208,270,268,207,239,269,237,238 -208,210,272,270,209,241,271,239,240 -210,212,274,272,211,243,273,241,242 -212,214,276,274,213,245,275,243,244 -214,216,278,276,215,247,277,245,246 -248,250,312,310,249,281,311,279,280 -250,252,314,312,251,283,313,281,282 -252,254,316,314,253,285,315,283,284 -254,256,318,316,255,287,317,285,286 -256,258,320,318,257,289,319,287,288 -258,260,322,320,259,291,321,289,290 -260,262,324,322,261,293,323,291,292 -262,264,326,324,263,295,325,293,294 -264,266,328,326,265,297,327,295,296 -266,268,330,328,267,299,329,297,298 -268,270,332,330,269,301,331,299,300 -270,272,334,332,271,303,333,301,302 -272,274,336,334,273,305,335,303,304 -274,276,338,336,275,307,337,305,306 -276,278,340,338,277,309,339,307,308 -310,312,374,372,311,343,373,341,342 -312,314,376,374,313,345,375,343,344 -314,316,378,376,315,347,377,345,346 -316,318,380,378,317,349,379,347,348 -318,320,382,380,319,351,381,349,350 -320,322,384,382,321,353,383,351,352 -322,324,386,384,323,355,385,353,354 -324,326,388,386,325,357,387,355,356 -326,328,390,388,327,359,389,357,358 -328,330,392,390,329,361,391,359,360 -330,332,394,392,331,363,393,361,362 -332,334,396,394,333,365,395,363,364 -334,336,398,396,335,367,397,365,366 -336,338,400,398,337,369,399,367,368 -338,340,402,400,339,371,401,369,370 -372,374,436,434,373,405,435,403,404 -374,376,438,436,375,407,437,405,406 -376,378,440,438,377,409,439,407,408 -378,380,442,440,379,411,441,409,410 -380,382,444,442,381,413,443,411,412 -382,384,446,444,383,415,445,413,414 -384,386,448,446,385,417,447,415,416 -386,388,450,448,387,419,449,417,418 -388,390,452,450,389,421,451,419,420 -390,392,454,452,391,423,453,421,422 -392,394,456,454,393,425,455,423,424 -394,396,458,456,395,427,457,425,426 -396,398,460,458,397,429,459,427,428 -398,400,462,460,399,431,461,429,430 -400,402,464,462,401,433,463,431,432 -434,436,498,496,435,467,497,465,466 -436,438,500,498,437,469,499,467,468 -438,440,502,500,439,471,501,469,470 -440,442,504,502,441,473,503,471,472 -442,444,506,504,443,475,505,473,474 -444,446,508,506,445,477,507,475,476 -446,448,510,508,447,479,509,477,478 -448,450,512,510,449,481,511,479,480 -450,452,514,512,451,483,513,481,482 -452,454,516,514,453,485,515,483,484 -454,456,518,516,455,487,517,485,486 -456,458,520,518,457,489,519,487,488 -458,460,522,520,459,491,521,489,490 -460,462,524,522,461,493,523,491,492 -462,464,526,524,463,495,525,493,494 -496,498,560,558,497,529,559,527,528 -498,500,562,560,499,531,561,529,530 -500,502,564,562,501,533,563,531,532 -502,504,566,564,503,535,565,533,534 -504,506,568,566,505,537,567,535,536 -506,508,570,568,507,539,569,537,538 -508,510,572,570,509,541,571,539,540 -510,512,574,572,511,543,573,541,542 -512,514,576,574,513,545,575,543,544 -514,516,578,576,515,547,577,545,546 -516,518,580,578,517,549,579,547,548 -518,520,582,580,519,551,581,549,550 -520,522,584,582,521,553,583,551,552 -522,524,586,584,523,555,585,553,554 -524,526,588,586,525,557,587,555,556 -558,560,622,620,559,591,621,589,590 -560,562,624,622,561,593,623,591,592 -562,564,626,624,563,595,625,593,594 -564,566,628,626,565,597,627,595,596 -566,568,630,628,567,599,629,597,598 -568,570,632,630,569,601,631,599,600 -570,572,634,632,571,603,633,601,602 -572,574,636,634,573,605,635,603,604 -574,576,638,636,575,607,637,605,606 -576,578,640,638,577,609,639,607,608 -578,580,642,640,579,611,641,609,610 -580,582,644,642,581,613,643,611,612 -582,584,646,644,583,615,645,613,614 -584,586,648,646,585,617,647,615,616 -586,588,650,648,587,619,649,617,618 -620,622,684,682,621,653,683,651,652 -622,624,686,684,623,655,685,653,654 -624,626,688,686,625,657,687,655,656 -626,628,690,688,627,659,689,657,658 -628,630,692,690,629,661,691,659,660 -630,632,694,692,631,663,693,661,662 -632,634,696,694,633,665,695,663,664 -634,636,698,696,635,667,697,665,666 -636,638,700,698,637,669,699,667,668 -638,640,702,700,639,671,701,669,670 -640,642,704,702,641,673,703,671,672 -642,644,706,704,643,675,705,673,674 -644,646,708,706,645,677,707,675,676 -646,648,710,708,647,679,709,677,678 -648,650,712,710,649,681,711,679,680 -682,684,746,744,683,715,745,713,714 -684,686,748,746,685,717,747,715,716 -686,688,750,748,687,719,749,717,718 -688,690,752,750,689,721,751,719,720 -690,692,754,752,691,723,753,721,722 -692,694,756,754,693,725,755,723,724 -694,696,758,756,695,727,757,725,726 -696,698,760,758,697,729,759,727,728 -698,700,762,760,699,731,761,729,730 -700,702,764,762,701,733,763,731,732 -702,704,766,764,703,735,765,733,734 -704,706,768,766,705,737,767,735,736 -706,708,770,768,707,739,769,737,738 -708,710,772,770,709,741,771,739,740 -710,712,774,772,711,743,773,741,742 -744,746,808,806,745,777,807,775,776 -746,748,810,808,747,779,809,777,778 -748,750,812,810,749,781,811,779,780 -750,752,814,812,751,783,813,781,782 -752,754,816,814,753,785,815,783,784 -754,756,818,816,755,787,817,785,786 -756,758,820,818,757,789,819,787,788 -758,760,822,820,759,791,821,789,790 -760,762,824,822,761,793,823,791,792 -762,764,826,824,763,795,825,793,794 -764,766,828,826,765,797,827,795,796 -766,768,830,828,767,799,829,797,798 -768,770,832,830,769,801,831,799,800 -770,772,834,832,771,803,833,801,802 -772,774,836,834,773,805,835,803,804 -806,808,870,868,807,839,869,837,838 -808,810,872,870,809,841,871,839,840 -810,812,874,872,811,843,873,841,842 -812,814,876,874,813,845,875,843,844 -814,816,878,876,815,847,877,845,846 -816,818,880,878,817,849,879,847,848 -818,820,882,880,819,851,881,849,850 -820,822,884,882,821,853,883,851,852 -822,824,886,884,823,855,885,853,854 -824,826,888,886,825,857,887,855,856 -826,828,890,888,827,859,889,857,858 -828,830,892,890,829,861,891,859,860 -830,832,894,892,831,863,893,861,862 -832,834,896,894,833,865,895,863,864 -834,836,898,896,835,867,897,865,866 -868,870,932,930,869,901,931,899,900 -870,872,934,932,871,903,933,901,902 -872,874,936,934,873,905,935,903,904 -874,876,938,936,875,907,937,905,906 -876,878,940,938,877,909,939,907,908 -878,880,942,940,879,911,941,909,910 -880,882,944,942,881,913,943,911,912 -882,884,946,944,883,915,945,913,914 -884,886,948,946,885,917,947,915,916 -886,888,950,948,887,919,949,917,918 -888,890,952,950,889,921,951,919,920 -890,892,954,952,891,923,953,921,922 -892,894,956,954,893,925,955,923,924 -894,896,958,956,895,927,957,925,926 -896,898,960,958,897,929,959,927,928 +0,62,64,2,31,63,33,1,32 +2,64,66,4,33,65,35,3,34 +4,66,68,6,35,67,37,5,36 +6,68,70,8,37,69,39,7,38 +8,70,72,10,39,71,41,9,40 +10,72,74,12,41,73,43,11,42 +12,74,76,14,43,75,45,13,44 +14,76,78,16,45,77,47,15,46 +16,78,80,18,47,79,49,17,48 +18,80,82,20,49,81,51,19,50 +20,82,84,22,51,83,53,21,52 +22,84,86,24,53,85,55,23,54 +24,86,88,26,55,87,57,25,56 +26,88,90,28,57,89,59,27,58 +28,90,92,30,59,91,61,29,60 +62,124,126,64,93,125,95,63,94 +64,126,128,66,95,127,97,65,96 +66,128,130,68,97,129,99,67,98 +68,130,132,70,99,131,101,69,100 +70,132,134,72,101,133,103,71,102 +72,134,136,74,103,135,105,73,104 +74,136,138,76,105,137,107,75,106 +76,138,140,78,107,139,109,77,108 +78,140,142,80,109,141,111,79,110 +80,142,144,82,111,143,113,81,112 +82,144,146,84,113,145,115,83,114 +84,146,148,86,115,147,117,85,116 +86,148,150,88,117,149,119,87,118 +88,150,152,90,119,151,121,89,120 +90,152,154,92,121,153,123,91,122 +124,186,188,126,155,187,157,125,156 +126,188,190,128,157,189,159,127,158 +128,190,192,130,159,191,161,129,160 +130,192,194,132,161,193,163,131,162 +132,194,196,134,163,195,165,133,164 +134,196,198,136,165,197,167,135,166 +136,198,200,138,167,199,169,137,168 +138,200,202,140,169,201,171,139,170 +140,202,204,142,171,203,173,141,172 +142,204,206,144,173,205,175,143,174 +144,206,208,146,175,207,177,145,176 +146,208,210,148,177,209,179,147,178 +148,210,212,150,179,211,181,149,180 +150,212,214,152,181,213,183,151,182 +152,214,216,154,183,215,185,153,184 +186,248,250,188,217,249,219,187,218 +188,250,252,190,219,251,221,189,220 +190,252,254,192,221,253,223,191,222 +192,254,256,194,223,255,225,193,224 +194,256,258,196,225,257,227,195,226 +196,258,260,198,227,259,229,197,228 +198,260,262,200,229,261,231,199,230 +200,262,264,202,231,263,233,201,232 +202,264,266,204,233,265,235,203,234 +204,266,268,206,235,267,237,205,236 +206,268,270,208,237,269,239,207,238 +208,270,272,210,239,271,241,209,240 +210,272,274,212,241,273,243,211,242 +212,274,276,214,243,275,245,213,244 +214,276,278,216,245,277,247,215,246 +248,310,312,250,279,311,281,249,280 +250,312,314,252,281,313,283,251,282 +252,314,316,254,283,315,285,253,284 +254,316,318,256,285,317,287,255,286 +256,318,320,258,287,319,289,257,288 +258,320,322,260,289,321,291,259,290 +260,322,324,262,291,323,293,261,292 +262,324,326,264,293,325,295,263,294 +264,326,328,266,295,327,297,265,296 +266,328,330,268,297,329,299,267,298 +268,330,332,270,299,331,301,269,300 +270,332,334,272,301,333,303,271,302 +272,334,336,274,303,335,305,273,304 +274,336,338,276,305,337,307,275,306 +276,338,340,278,307,339,309,277,308 +310,372,374,312,341,373,343,311,342 +312,374,376,314,343,375,345,313,344 +314,376,378,316,345,377,347,315,346 +316,378,380,318,347,379,349,317,348 +318,380,382,320,349,381,351,319,350 +320,382,384,322,351,383,353,321,352 +322,384,386,324,353,385,355,323,354 +324,386,388,326,355,387,357,325,356 +326,388,390,328,357,389,359,327,358 +328,390,392,330,359,391,361,329,360 +330,392,394,332,361,393,363,331,362 +332,394,396,334,363,395,365,333,364 +334,396,398,336,365,397,367,335,366 +336,398,400,338,367,399,369,337,368 +338,400,402,340,369,401,371,339,370 +372,434,436,374,403,435,405,373,404 +374,436,438,376,405,437,407,375,406 +376,438,440,378,407,439,409,377,408 +378,440,442,380,409,441,411,379,410 +380,442,444,382,411,443,413,381,412 +382,444,446,384,413,445,415,383,414 +384,446,448,386,415,447,417,385,416 +386,448,450,388,417,449,419,387,418 +388,450,452,390,419,451,421,389,420 +390,452,454,392,421,453,423,391,422 +392,454,456,394,423,455,425,393,424 +394,456,458,396,425,457,427,395,426 +396,458,460,398,427,459,429,397,428 +398,460,462,400,429,461,431,399,430 +400,462,464,402,431,463,433,401,432 +434,496,498,436,465,497,467,435,466 +436,498,500,438,467,499,469,437,468 +438,500,502,440,469,501,471,439,470 +440,502,504,442,471,503,473,441,472 +442,504,506,444,473,505,475,443,474 +444,506,508,446,475,507,477,445,476 +446,508,510,448,477,509,479,447,478 +448,510,512,450,479,511,481,449,480 +450,512,514,452,481,513,483,451,482 +452,514,516,454,483,515,485,453,484 +454,516,518,456,485,517,487,455,486 +456,518,520,458,487,519,489,457,488 +458,520,522,460,489,521,491,459,490 +460,522,524,462,491,523,493,461,492 +462,524,526,464,493,525,495,463,494 +496,558,560,498,527,559,529,497,528 +498,560,562,500,529,561,531,499,530 +500,562,564,502,531,563,533,501,532 +502,564,566,504,533,565,535,503,534 +504,566,568,506,535,567,537,505,536 +506,568,570,508,537,569,539,507,538 +508,570,572,510,539,571,541,509,540 +510,572,574,512,541,573,543,511,542 +512,574,576,514,543,575,545,513,544 +514,576,578,516,545,577,547,515,546 +516,578,580,518,547,579,549,517,548 +518,580,582,520,549,581,551,519,550 +520,582,584,522,551,583,553,521,552 +522,584,586,524,553,585,555,523,554 +524,586,588,526,555,587,557,525,556 +558,620,622,560,589,621,591,559,590 +560,622,624,562,591,623,593,561,592 +562,624,626,564,593,625,595,563,594 +564,626,628,566,595,627,597,565,596 +566,628,630,568,597,629,599,567,598 +568,630,632,570,599,631,601,569,600 +570,632,634,572,601,633,603,571,602 +572,634,636,574,603,635,605,573,604 +574,636,638,576,605,637,607,575,606 +576,638,640,578,607,639,609,577,608 +578,640,642,580,609,641,611,579,610 +580,642,644,582,611,643,613,581,612 +582,644,646,584,613,645,615,583,614 +584,646,648,586,615,647,617,585,616 +586,648,650,588,617,649,619,587,618 +620,682,684,622,651,683,653,621,652 +622,684,686,624,653,685,655,623,654 +624,686,688,626,655,687,657,625,656 +626,688,690,628,657,689,659,627,658 +628,690,692,630,659,691,661,629,660 +630,692,694,632,661,693,663,631,662 +632,694,696,634,663,695,665,633,664 +634,696,698,636,665,697,667,635,666 +636,698,700,638,667,699,669,637,668 +638,700,702,640,669,701,671,639,670 +640,702,704,642,671,703,673,641,672 +642,704,706,644,673,705,675,643,674 +644,706,708,646,675,707,677,645,676 +646,708,710,648,677,709,679,647,678 +648,710,712,650,679,711,681,649,680 +682,744,746,684,713,745,715,683,714 +684,746,748,686,715,747,717,685,716 +686,748,750,688,717,749,719,687,718 +688,750,752,690,719,751,721,689,720 +690,752,754,692,721,753,723,691,722 +692,754,756,694,723,755,725,693,724 +694,756,758,696,725,757,727,695,726 +696,758,760,698,727,759,729,697,728 +698,760,762,700,729,761,731,699,730 +700,762,764,702,731,763,733,701,732 +702,764,766,704,733,765,735,703,734 +704,766,768,706,735,767,737,705,736 +706,768,770,708,737,769,739,707,738 +708,770,772,710,739,771,741,709,740 +710,772,774,712,741,773,743,711,742 +744,806,808,746,775,807,777,745,776 +746,808,810,748,777,809,779,747,778 +748,810,812,750,779,811,781,749,780 +750,812,814,752,781,813,783,751,782 +752,814,816,754,783,815,785,753,784 +754,816,818,756,785,817,787,755,786 +756,818,820,758,787,819,789,757,788 +758,820,822,760,789,821,791,759,790 +760,822,824,762,791,823,793,761,792 +762,824,826,764,793,825,795,763,794 +764,826,828,766,795,827,797,765,796 +766,828,830,768,797,829,799,767,798 +768,830,832,770,799,831,801,769,800 +770,832,834,772,801,833,803,771,802 +772,834,836,774,803,835,805,773,804 +806,868,870,808,837,869,839,807,838 +808,870,872,810,839,871,841,809,840 +810,872,874,812,841,873,843,811,842 +812,874,876,814,843,875,845,813,844 +814,876,878,816,845,877,847,815,846 +816,878,880,818,847,879,849,817,848 +818,880,882,820,849,881,851,819,850 +820,882,884,822,851,883,853,821,852 +822,884,886,824,853,885,855,823,854 +824,886,888,826,855,887,857,825,856 +826,888,890,828,857,889,859,827,858 +828,890,892,830,859,891,861,829,860 +830,892,894,832,861,893,863,831,862 +832,894,896,834,863,895,865,833,864 +834,896,898,836,865,897,867,835,866 +868,930,932,870,899,931,901,869,900 +870,932,934,872,901,933,903,871,902 +872,934,936,874,903,935,905,873,904 +874,936,938,876,905,937,907,875,906 +876,938,940,878,907,939,909,877,908 +878,940,942,880,909,941,911,879,910 +880,942,944,882,911,943,913,881,912 +882,944,946,884,913,945,915,883,914 +884,946,948,886,915,947,917,885,916 +886,948,950,888,917,949,919,887,918 +888,950,952,890,919,951,921,889,920 +890,952,954,892,921,953,923,891,922 +892,954,956,894,923,955,925,893,924 +894,956,958,896,925,957,927,895,926 +896,958,960,898,927,959,929,897,928 diff --git a/gold/min/sphere200/base/quad4newton_nodal_grey/cam0_frame0_field0.fimg b/gold/min/sphere200/base/quad4newton_nodal_grey/cam0_frame0_field0.fimg index 6235913648398d0f816bcce4c01c7539133ded35..74314cf0224be959ea773d1ba195bc0845ac750a 100644 GIT binary patch literal 128015 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

vF&AVp8!_)u!Cvu=y9GkJ(q3D$9zt~k18CK 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 RBND%V9gIOyJ^lhHY@>mHd7A9aT*DI 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 UaxVPwm8oR@jqu0XLaT2tFPqnW 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 diff --git a/gold/min/sphere200/base/quad4newton_nodal_rgb/cam0_frame0_field0_rgb.fimg b/gold/min/sphere200/base/quad4newton_nodal_rgb/cam0_frame0_field0_rgb.fimg index d86603eb0ed5a3f8c6d761aa7df7579db5e8ac3a..71eb5d09b72aefbaa89c5faba0cb66ecf8163abb 100644 GIT binary patch literal 384015 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 literal 384015 zcmeF4XFS(`-}h085Dl4W+l5pl`G`s>GnFJMdxY#{6)BVmC6%nKgi2PCQC7A{NWbq7 zl`UCOx?bJ6Zd^Cc>pUOld7SHT-02X04KH&ZFP+#XJ>Tild4A2prE?h>rEpmJF6 zU{f&9q)3KGX49H9itNw1c&9m$BAvpe-j^Oy#J2Rcw^%eq1gq}dco#vD{A(6*7B?y4 zv_>fFcOXUH?oQ0S0sb9Y)0oNw{@E6_EPr%?B0{T#ZB?BqQWslu=!YFe3ch_T;a<~D zz8v<7Q88^Kk-Oxdm>ZYO^YNeb-|PI_p1%VBnkzsPi95S|q>)fZnGA3AQ6#i__YRvL ziWtY}TB&}f$cxRr1KjNtdAjaOHvK(CYIZ!yPpzj&8B^JJ>uQSRckd@E#Tic_bbL^@NX*Dc@H1>$9ty4{)#t#zKws=lsiTGvo{QRI8j7v zCjUDZ_~%65`99B*B7*{@ijF1}*}Nd5MbQY4JG;%A_XK`_?-od;7E@#& zf3uVY1*PWtBP}Q@wTgE6t54)o^G)R$y>QTA3zd|=L%G%4*DZ&xk^|QH?B2g`;4_kep zNOjZD$>~Ol#8fA(zElG}mwGc`K?Oz9YQuwlO5jKH{MSu@f9jQdyG?W8d%uh{)qsCC zN`W7?Jf?`iz+n;u{yj+znCk-nJg%CvZU+Chgfi$kgMYCehnup&KS#Yy?!(t8;wyP@ z=Q{8&-+kGBP4G{5Mbd*SZWLKQc$%~EJVmzkSSU%`Qluzv_D#Gw{PA~AWzjPfVH)+( zDn1Ece5E|v`WQu)D4Dzw)}hD*Tcz{(A$+~1Osjc6MI1iXGnDPY`-lkLUZzNqq_>3+ zn&l|c#`d$oacd*#&NBGiuw|Z$|J--c{Ja03b_J~5)Fm}mbdVgu&wl$^=;Yx=FJy7=A{r1tv5iAtMc6LN9j1te<}o2P_~26-GoRjdLpM42NvL;G z#LwXRY)KpXh~fwp*=CBU2r^DQsHKSIasI_jmH2%xj&r9=!8`K-{+w6Pccv)|nR6+^ zIv^mV^^_uJiVP>iz`yRLV;MEzAAOqx2V*Qn6jeH`wt#;z(k{7r;NNYgGks3rpNd)h zSTOjPt-ZSZ{$+4=O@d*HCq-(x*9{lDB0o&scxl*yB3^fnB}v;*@T6kR(7Wa>-Q{euz_8cAPI(Dgk+^IZI& zc3;fD-v6Cf;E8P7TXVi9;?;8J<(idr60~xqogpWkOeal+_$;B5V>ETGYm4aQ{`7~> zE(~-+nO7L8%_2v8L zcssblv*EDkdvMS^_(4S-MI;6fGO<^I6O%8`9W0|r@`AO^K7|xnVG_A16Z~s?FQESc z{0k5ZKQ#^h<$W#?U7m!TuvjL2Blu^3!KGaa{JSkjeO z*89!N!M|rQp6s(1DdKIr`SuSNik$74VPgXS6a;TgZn8#B`1Tgv$P_w|tLbz)a=-V7 zlo*#H_dA?jX6SbW+&jIMja?JGmfe(+e1IbBd-@uWs>0WITZyewqDZguO5Jbr(1TM^ zlka3H5-mPgSiA+?J)@>qE{6XO^lm!Sxe?#bWeI0mi}!zp7A-G85t*?V3GY?#`Q@|C zqRZy{=>MH}*ZjNs?{)(E zqm#<2Wtp|?bmE=ifBeW*=U>xznc4Y$m|(%x97>Srs)(Bp$mUA0RN<}W&J(~{_WXB%w)j7 zx2ltz%fLS~hGiq)Zcs$2D)C3&Rf-t(#xA{di6RCw%SQHrf9d5qtgHX>FQbZ;%^v-W z_9sV9E98HE0aaoq6v;dn6mbH%-^!LBMlr`JvSy+xcM86Drd3|X>@Ya*?_&G~zW3Rw zgijvuz1hJ9s_Wr<8C~q9J9pr5w+rk|k)cS_!bj@@p!*hGv9)u7?mNX})atSxU$ere6Ftki##d7}KhF2g|J`nw`PcJ5`U(}C;P}^|KNLCRv)Opn40PYPOU|Wn@P)4b?%gm&be`1; zPJN@uUWY5?-0;C_sW%pF{sewW?5t7zK#}X89;oXdC?{F|^mx~B#FBZ4)u$>1N89GB>M@UN{na;Yr%$8$90!(cf0 z^w8QV2K=*p-_ocC{)uhQr+@RM$e;U%?XP)I#I&d6k)kvFa?bJ^7CY!hkwSw(3-Bss zN8Oh*6nPVSIeF?N^qtyrTOs6rcADD~47BmSc%xb$!}mIUxgEX?zBffP-X@q(Bz}ne z;8g(6M2AcAw^2l%bBW_QDezP$CstM*{N7PE#I}hdcW>O8omd0Cd4u2nJ3n&E(3p|m z+{h7MgxwHWhR6F_OzE=Y@t?14eY_Yt^{nQXKL3woUHR>1zCXqDJp3Ph_szff|Eeoc zezIGvRJVf&iHSQ7Y^4*S-TPwQw$MrErLOh?F*-?7FE&=&L?_Xr{`P@u!8^|s>8H?v zrI{Uth0uYs%bcY$paY}2O~Nlh2M&715AJ{tbY2y_wU&`i`j1I#tNxoP!*YFDs!tx``q_iyIEO)lkG_ z1@GfSdV=rY6D3pNUmx3c1pkB>oJLA6fRFmGGjyCNa$afm#Ti@V zbjIh)UYg_2vgw%!W8{F2Ywlh#pvaCt`g}L^Ft77+W+n~3*E8X1Nf&(YFNT*BBJjQY zEQZzw?8Y2U^_Ti-If`r)SHI=66+AmUIm@>h`ctqrp#r)u=1mOURI;^ky2lT=|8Pt}%*?oLQOHJcu5`=W$i-ZF~E{n}5F@-j0~QTX0|9?2V4yYN1>+Kv`)$NNfh z;gFQ3$Wnd_<#g!2j7{?1%Fun@N*(&&p!*oMJv2|?$94GgM)~|--REWErppDt`z=FJ zmkk^p*~00@OcAapOMG54B6lo3&ny0$M!we7S-zO25q0+??8f6XBK1y1+iG;4ga0$` z#`#zIkG=v|$kAv8%~C?&STuXWzJu_JPaIyoA3CjNNd3beIxz`kkn-3~CvlbQRTk}} z6YUkU)7YMF^dUhnuJW?ZLdO-vH?U4%jyNrKVGn$8 zg7}q>(eS}mKY}e)>F5_U-W}`iKtFKs-Yt(7_}J79OIVQu8YrB698w7#CB4{`trUE5 zDOl(85a z8T?Br-`~}61^g-XPaXB92>Y5%N<847H0OJ|{&~#DhzKstvBrGNk4oMxrr=UquW|7y z=uO(SgSN>1`eWi1WOOjsQdbkZ^bq`T?dqWg`zWH%{yTz;z~4Upxoq1`ib(dxQ|DyC zE#UKFppHuTJW=)N(xzASO*zO|-D|J3kMgzfr=zRSyz8^|rZrON@m zr<{1^01Nt+zRAO;3!p!*u%so<(a3_44__D0(1=i2f7JB}8rj}+_o&Qw8qtrBFB%`D zkv{^al`MVp9Q;S$U-OUu-}4H1<*O%D`gV}3S991u=+H@QZko|^4LY%V?rePFAe}Vq z6Fe=tk52Y-eoK4}(c^!)&P+)W-=EX2O^~CLJN2s;jKB|v+~L@?27cI~zGJ^E{BXn7 zgXhIJ(n(@TYup0#BH1(hY73zQ+tjSvjzb5U?9{&9u#`>&1+43Yp#ygc9p8BZb20ZM zj{BJZMh|*pkDSI7begn9FWYx;qP<8b9zJ+^s)NgV_~5hy4-D^q!hG`B0-?npu;*rd zHp!*|`UlFa96j*0CBuchWfUn+^WSs^b1+?_TIVSdU87)}2NFu)losE={E5n`L-RL`Vq}p!%f$r;!TFkLk0=-P`l{ydTzJA`H$3H^%F_pjDtO4D( zd|+`~%S!aoS);wq=sDysvkS^Eflq(FU3%jpics$18gdNCIoG7**~9Nf9Bit8H%TK) z_n&7~AA|puJT>=ih(`8XWNIh((TL@=U$S2>jr88(35=)aIr!i6E}ef>|It@Knps9g z?0N@zI4*k6#`K_|(FxKcIXhi}(^8qt9tj@&tXNFKdNqc?lzALu~K2klcy z(1CpyPX3hSp_5fSi!Ovh2Np5KN;a_3N!e=k{C>>E=>0T%*7b)XUzuH^(tbk6rM7=K z`~yC3t>NdgLClHtR{r3J502N($ua*-5!qvUA5z-jD;?^UsYd)c!qdh14!!US>h88T z;ATsQkyat}REQIgaSn9XUFj!(_kcrpRI!?XfA3a5TXhut%aHXiR0RJX4RU_v1OM(C z(V$3}Tu#m^HSkaE(b`I7aB+2qV7LP22)&mqbK8cT^7ji1 zr!AOsInEGzRTTXVqtEYW(0$w9E)|^+M89pA7OVl?_j1&#=jAf+bcLwNL3ZfiAkEK= zi=i(&mmKba-}ScH|8n>jjeO&bG*|<_TQh0q=KO<3Dmwz*2Zw3o^2O7gSNdsW@Ft~9 zzR-x*zCXG=bQ;mSE>+ClMI)0ZJ2H2w&G*Lt(f8Z@U$XxvZv5WO9FyhwvFX zc@p)BQRWnMm(1lVUU0ChR6j6%A__0!w;MHY?pihKWtE3eliSx_)Dq4LvwL_&A9Bn0D2LA<>-`MAW=}bF#R@mZT(@c@?ak;EEHQ?on<=c(lqIbA{ zwL`rKJiY4NE1nCEISwl@WT9tyR9aRI{&^g6u?PbH7C0(%5b#eoe);`xx1j&HLS_QM zzg3!xIr+gqhS&uM6Fu?$Ya*J;3VD+Z_}wJq z%zankcj-p2L<4`)Na>PA;?I!tRg8b~VHl+mmg={@jsrAu|IV8G%wK6F#m_?jCAc@d zIeMr^?ObZxtrmai*p1F z(2LwuoHA&~d`!DfX4ekP$LNdj?YDytWHROu@_`O?_pkeG0Uda@Id4Q5I&d3+c+ zxG`eBdfha7hP4aA^x=b(wrqQC3?J;+$fmE=jeLKQdzow}{N9|`BwGvoqQC3N$6AW? z%=XgnmqQP}Hp|s}4UW;3k1*z89&g6+emwX$_dUs7J{9LG)NHRU1^-;kH~H)V|E@}j zIAw!>3#i*S1i(K#i3`tM{gChZa&}f-1eZcyY~JRK`Ihl->q>0Vx4ynyYj1|vxj9;c z7(u@=idAemj$AQ1+kCe+az>}w)7J34E9Y#6v*COFgL01uDq?=cJn_TB?U=L9`&h0d z1^rfZ(|H=YFIMEo&Kl@GlZ9a}`GS~hu2>WNdKGd#2iK@BF8F#ejSCytFi*&KE-DIs zw?=4^MG=0t_3qu9Z1B71WJS3b!SAk5e3BykH|JBAcCtgx=gJw8-45>MS83K*b>nMy z*RA}YX=LS+GM9dEFY`AK`3UZHrnYGJHqnUUtxz+LdKxKQy!7*=^gIXuz4zbz@Bi0c zf#s8>Z0Axs2+Qse#wc4lk$)E1Q3DQITTTsr1_#aetu(0z2ct|Y_ud5uvtQEoD1w8V z`~%ouAE6WJ=E~2);2>{(%2FqFI#E>9c@U3Wa5|*fCmXpSPk;5pq8(i_x1Ae%X zRy8XLKkQs_?9D6mB0;GaC{gqx2kM`V*snz|EYRQ{3LVHKkui1+I`CTD=fdOAfm6c2 zHqBx#hPPbZ=sY8xyxRTgV%`iza>u%R zS9z#3z7_q(ItCpy(*N5;R^$VCI2R+iq8U1{k$q4Q+H9Yn(WmWi}8a=aGS!5{}Z@qF-5@GUr4 z*BZX>6FBIcq~_ZQ4i-8dZ+-|4j@E2iyB{2677;NhJ5DFt{439_0S7nT4k|U$L?7~9 zE7BMJ$SOaEGC$;krHV1a7RUt`)|g%wLoVpLsV%E&8=WlIEhhWnhx019njfGSkvGr( zUWfUZz~4qo+n@v6*L(}eg$`_JzL{VH9k_P5{^l6wqtiUX4b>OIj|VsXaX=s9D?FiX zItl-}A%uB7d~kW9wpQj>^bK><*pbjvvA6 zIlbl)+hO?RXT*ep@9m78?fI}9`yP#9hlY26XA#SbH%Mc?v4O?OO$<8GUF80^_1IV0 zI(xwtx^G$Q3f;BPeUBTo)_vuKFZS48(ZP!E2e(~eUI-m2z>;SQzw7AlSNsDx-z$yS zEl-j2Np4Okh(^xW=n-m+j!*^u`4z48T3fiURI?Wi&$F%5s~0jlN{DZC)7vNAe?KGVFcc zd|&c!y&va){y*mmYip~W4tF}qnbwlO0}fuUE7Jb}4mx=k zicElmE<+2-hQYzai3#CSa8Nv_L+l(l7*Jv5J#-Rtd%EhLD&XMjt)44fbm^pLZy#SE zdSZs6N;j_qm}mL*dP*C)VCbt$dQ8X#okPpyLg9xMq=k0=gdb*p)Y`cVe%O0p=GHOv zB3T!ma@Ej_EI+&KItS*Yqs4XQlAr@E`(KxHLI<8O?Grx$9q4*Xc)JDzoxF%qjuiZf zUSg8o`W!y^OSnPB@_x+eJvuycgpNMIiEZVzcJv2R*HBK-Z_pC$9Z`dvq`# z$b8cD%|Yl$?^AL%D%h`EnRRE|F7!4t@59%i?}$lTs4B4;^U>R?-yDPP6aAE^90%PO zpO?|g3ftBp8@MEr} z-1})|-3auY+_kDK^c&{4T&fDu>&ARN^!x|7xBg5?xOOLv6n~sQY-Z~gL{t2htzbyJuwqEuP|_Ln&nx;;7b~@6I;)FHjhSr-DFc9 z&8A^b@b+($r}G^A&$+ATpXL8|1uT_z{dyEoN*HqWL?rz%cl=}1>INS=**qR|<(Mb< zv|hKj5FGR~U3P7u3!NO)%X=t#9(kNXxr*pH%)e+&o@KP6lX^k>hNs}*+G9c@a^T>J z?1H)waIn70_D$X~I{A9Nak@wcxt{1Dr$qE4(h{piEYvW^canW2iwb--Ey2xC5&2(d z;k`Ea;fW#Jkwx&sOGneHSmB3Fdy38J8^L9pFa0+#C;jM@@aZMIn2TxY%{U4jIC(4m z(K+bA$hiDLtp(_ZpBk~u%z`_g1ddvbV=v;*!oBz4gKw%nu!`%Uh`G^@_B)-}{|)1J z^nDM1tbCT^WDVw1lvA&Yyult_4*RQK%mJ#8h+c_&4*e*>Q@G~dmwV6E19AZ{*@Vb+Q7XfW!pE&w1H!$ z4`MUHy~(O-6SylOxS+U9NcqOOVTOL zrI8o!A}r*=y^Hv=}(}HDJ5)CUB7cGO=bBJ+XJ$BFRkj zBU?BIzVAjqV)se!VUjYPeB5~?_AC7GY=-y#Kk&mAuUKmaw$RCj-7PwgMZrPW*v?(( zMHC*5>fVD6+|*U!Q2`y;%_KZk$U!Gh2Q>D1GDAPEugw30KICAQfY-h$?BRxNyQU5w z{J~7(0XKYb(b6Z@fA`|F8Z2ELTCrdDzA18X9p;8FH74AAOOe2z1+FZZgOLfA-or3mrtv3oziU=AX2p8Yak0j-PvLtlE8VB6;d}S5VDMsx@7PY2&_&4%u)UR@p*2;FB>WTSJ57d`SWgQ@6c=y{qp==3f@Up$gD z>;S(z9n7V)3x0RopY9@M_}#t!Yh}HW^XdH3yElq{V@T6fI1>HFgGG|^R_Jx5b7#+5 zf1(kI&dRg5!M(whV!i=z&+(Ad4Rdhs%);k%W^nJ$OtMimxW^{XW|mn>Biv@eR@p@~ zqPcSH=Z69sxp}7MB`>(=XVGNo@*H!6r@LwgGm!^oGBtapHIcmv4_~ z#K`&kcBlAx4*p~B^7%*qf3LvU0=dSuVNHZ)u3AtVLMPl(T}2Oqq0hQ=uIgN)6UK*E zAASV~#hdC+8C}Ahopljwwioh1?td`njxca-3cLzB5#e?Bb6garPXF-ZM zIH(v|SbhT>><_$Q_Zl1=UFG8b%79L|6dv{jU~cg1Yj%Eda8UZZvw1T55liQ4>ECVO`3CziKoDbNtZ%67z;P_KoqQ7uk~96=%2xd&P~vvMr$l zbFC!f6`=#~Ej*sn!isYgluj>`!CXv^! zG;(4@>N@SgF~4Hs~OFUmJ;$ zc;tdPYdyDyU`|FTG^$ixj!p`4b-Y@okpl{53Q396NxrR`lI{jN(c#iRyju``iF!oH z5OmTq=)hv9eVt*Li^;F!^726+!u8GFWzz)u25D&%-$C@INqaMrx^eE*!=AzX zcJO5vo%dBEbe=R9ZSuJ;C__a{a8u;9p+hRQ&O1 zoHMG!t>H@TsC6GJam<%wLko>?@x*C-)G@tp9Q7IBIn!NJvS6GLL&*o zwP*9tZ_Ff*}H+JH|2jqrUr_iKhb zrk{V%|9b^YzwqZ=c>o^ih&J4h#`#kFi%v%0p_2%=A}+58oI@~m>Vj$*`U*Y%MT0lM zo9Rm&E&$M@Z)|-WDd1oi zZ-@%N9sD!nBR&IgaMin^-KOARbgK2T?cg9+oJxD;3Cz(v3wf{+95g*tDyOGOC+s{% zCyt{ZIjV5>mjrS_i#xqD^}Fb#^}}uUJ=>8#1~R^37w3{H>=>;D|4P43KNU)ZZ!Qt5 zItl)1b;SSl2mjO=4=_gu;Bg|yRAW4`zhRYfs@M_x80FRZf>y{0dG2{VJ&n1SFE?L% z9)pgnW=!|g!1)JF6MmWSy&Vd_?yXRS5AR=hGFcY$FYzM^RuY)wY1Mgi9J(*+`PtC( z(0%F|`UhXEz`UT^a-GfWc>SL@e)$2vyWnHNb(T5w4NcDH%%_mE6`kZ}Mb3BPOrOml z`i;&Og*0~b8?LJRj+kSfWnFK-2<&OMx`AaI7mGm1t85wSOazcHZxQjo) z!5zUxRx#jUIVpI-=Y+kGLqm#Z!NH=MfhcEiuxM`wy9PM;MN{X}S0l_*6Gld5aIlMw zC-fBNWzKxtRD4K-PHyC03}i(=Vk!6iVFYqPo}a;C{qV#5QWj+_@WY|^HS7k_i$v?p zM&H_q=RIX5Gz}d%*>LeTA2)u_ZQ+?8>~wNSFYETDg>({Q=FL)!KIFi`fgNe^!N*ph zEPxOGkR4H;_8GlxWM&6rEB4PSE=}#NfqpyK+Tm165tir92Sf7EUwji_h{ymBpLiDe zgMV#Hx2YI|fAP=WstJRCA+wP|tyjRO`r0Pfi=1AY z&+D#p;P0MW)Q4pk^Wb|WCujH)_h9~dr{>`|@|df>=cLIajX50gI){7EeNpm>tF)l| zZsqX3kcRF{ndatE;l$kF0lC(g#qhgHq76FmyB|#TBaZ&0;amm|rbo#6wEPUsb|L5E zT+L^@@(X&~!8L-C=yhkaimJWaX@rU5=Vom|Pr>i>u>#!lFjJDr1NT@Io$WrnMK9uU zk81q4+n{iK2e@Z$ZC~>fxn7k+vJ#a^BY8R%{r&K_pVBkLx#4fSuN34N z!QUpHOITG6o!8YJnP>o=r&)HTYiTt0O}IZL^xUSADbLFc?cvD(#}!0 zu|fBtTxR5i&DsiEUU?!X6tm9V>)pTC^f8Dc(0+Gx|XE+3s#hkxHc#|5r(k2IWMp%dGE7n#re!QO41 z%(09K!aGiz^KDnCT#EuUAW%GvFybZnVv+Fzu>Tpg<=}oPbZ!jmL`qH8rbAY_N zDtN3jp#zxL*=~Hjgj| zLidHA2y~m{$MgADZ+NsEJ$B71>5wIOo^<+=_wc*Uml>Bi!|(QQG;^>RrxC#*!kCIV z=D6dW)w1X}wx3?a*h`XZY{r0QbIna%DBa-|8#weElj7=VN)-hF8JgN>v#r zOhe}dE=pF_e26}oX7c78be^9=Xqz2$UXyH~_;%>LVX2yE!CN#U%B{M6!%Z4l6mm{Z z?K+JNNN`OB1k%W^S01~rUY*y0^XU5bU4iuyJNc5H<9sTAA)BZy@M<#R)1N2kONE3T zwI9>TZ`qv-0#h*8oD!gz@`z3juNBTuhb|PZzW+M{x{!rurQ>PnLYAml($$OSo*Afj?gD_T{5O2zW)WNIU|6e87FlA{F@Kvl9yP3y>3P)1WZ7=rQ1Rsw4Y6o|o z_4BzlV1KqhGV;S)%*`2`SibHh`jOR_lytMuyJq&3TR%e1cDL)8HTW0ats12b{+&2* zQg*dJeCfTX>pr_<{+RZnrQ;m>jEDsPbtcFcl@!lD(Z~EtjAgl}CZ2z2O8mxN>}?bU zighYL=hehqu#kZ-4yqlN6vgL@81uM^L-$qxJjrLY3VO8e!a1-Ch+hqyyj$CrWd+3ffot$qmP>()HCsnHxiVcwqx;C~pbts@` zei2c+0)E*1k#Hab{BYX9^@a!QF$c(=H}C~I&?>vRwiP-sBG#9|axwh!)0U_R^dY0y zeu^Laf%9N0>ebV~!AJIKOVlC z$B$B^%4K!E$szFY#a0eJ_}&xeB%Usl1K)TLY(BIZz3wfGm1WRp zd>Q8ZcDbHUW5IcVOGiXb!S4!kIc2*|(}GmOMSsl zUce9QJ6xH~LN2H^%;k!?l_i<&#r*KMW`92Re?^a>m*9Drg3deDb!5?!`{3cscem5f zdD|Ylr*uVtV|Olp@(;t$D|+11g0Jl`aDSi}4Bjf0mL0r?Uivf3T9+%(f%?1yufV&c z&GI+a_#&6w@9K5W3)~FUzfo~j6yHl-)FHU5}!{Lf744Ix^V1)m=yO7|6Gfw+GIHX=ip)b%73yONlQ92UDBO7^lENVdG}| zc5v|Z*ytK_aM0oEnTxkEH#k-DF3nR5eej8?mut|E9IG>1;)z`FdcS?Z4SBo{Ywdb1 zX`HXHZMj5|2=-IHUiNAh!aSh*BBda1?9KJ?+IF&m%NeGZ%NX(a!>pF_QC;8S97-+AM(Y;zy$$D5KUP71MLbKE#2idxZE^P5XYjK@=S?pr!GEgx9&iQ! zs$;!Ib-_P}n36uO%Q#O6~mXkTP6~189Ms7df*hx!LhJ+;t-g3y>ow z1wDN~gFW4)5%%rK`D|k~6!s2aA8nz1&l2>yNjEPHihM%vP~u?|3GR8UmYCB3_mug+ zyhj6zx6YZ zgTL+h;g!2rCjl(nyR`(d8CjrXx9c=uR0>GB8gE-$1q>F`AwxqWSYe7idy zZ_BYGPEY6OV*YJ+|3B|f({4tLq?VTwIomk1$}*e}<*;J&r4sP$a{2pBuhF;Ocz^r_ zc(}f9`L!+JVOMLlL@0Q8doJ-uTQ+zlx3I4paOrw1{PB;S zUxG#9kF%cnB)KCe>}=Odz3vMgI5RzV8hwf1`d_9);Ghoux2}`}a>C|g_G_%MFMP*3 zHwPTl{PtF3$dFDv=<*kfkJ1Upsrm_3O*%Q*dX&R!KXS+5{iiIHuqTqGxprUN z>N_zPec}C>-V|2F1T;KCY^-6BPu{UvG zs%{!NpU2l5+5PA@TyL>D?d_!zp9?2V=D@w|sN>PgK7ec7FPhxIJ+7Rah7#bOJgt1O z2)L*FoO6|V5%RsY&aypunE#XeVfg^L9@nkj7tpdj@~I^&$(61^!l}ed7GB zSQ>fO*P5dTou_!1LqY>OZ_euECpYLkvMq62V<_fbY6C`(!q+DC3=1xRuf1SIV`&BN zT#rhT8t`smHoIRpcy}~!s+`Xok1wmg_8fR;E6Cs20p7LkFjq2l#eB87^UsCO(2XY1 z_g9(7ni}~jz+rRFea|Ra;ov3aip}zOOysm^_?HzImD*wB0Hdm(f2KgV? z2D?w-A-}`3h34R4#RgNY58z>Z>G*Fc@NgvRahe@?IH+~AE(|=pX)RiE=PB~R$E^k4 z8F)N?iMqXibHnN{-CvV2e{#V&#|%FCpvAq~m(Ybr&c=Iuy^lGT;GY$}(1rZZOfEi; z02lo^*fc`1*S2F}cn19O*^fC@%>kJ2b4eY`y+kLwe=^k{^`w(e1;N3|m?LbD;>k<` z2dzf#%^U&;ZHkD-O>l5q-TeRyL!2M;TgkXt505L{HvSF$h+1mgrN?{md{ZwQxE0}# z9ri1%haZ;tF?gq1415fz-odgKI`fBNMKg4ufr|X0P0)cUxA+*w(T8Mx>s8w^j?Zg* zm!>%I^>5Cmd+B5c&dK}DRi9diz1uq*6Ix1ePS#Uxhpue+-kAkSW#FIEaaxu?`1dRH z=*(L1&)i{KOOy}xI|6ksh&$qQ=R9ooZZN~%n!McG%gFuC2(xMJJ&asXl-tWh89lUB ziA3i%e2ypYoJ*P*d~bM3W;JvlLu9G@&Xvd+tu#5<&~qp;JMh@T?9`P`dOBH;GWxRq{qi>=sf+1LO}!Q zJa*o%+&iK3Xnc|88qj&%3ZK@6!`J$+Q_E$BuT2--*q?|T?~SHGjkQ0G1kJEMKY9td zAcwS+33%62U$r<4yvtgAMg9|bCwS<>r+wgEz4wq}l@qwV_+p6}c(>t{$_$@9eD{5Z z$R1nF@7T*!)jyoqf&V%R{PX_Q^KbG4HT8e{*?5_^wa{-DE_NorgKlDy33RGL{%5nW zK)3=usM@b(CE%ge5^*urQuL-PEra~9mtoC292D)&?zKpxa;g9KI-@a_nZ8YUzYB+c*$RN?hgEp&paX?QG1#^c?{Df3fAKWt0au8x z|2067i!Q2LYr2r%ajlAVY6OQ$G^z12^cZ>4I$Ak6FQ#yx+T|2*iAR;^2KcwqXNb%G zI?i)p3_C9F{r7x7{$-pF6dAU7z-@UJzId96dnzATeS^0Ed8T_si*_g-#zxz;_qoQdP=M6Nwo)1S(y1ov`ZK3LpUg}sX2$%VVXz2wt{U-~e=Vo!h5(~|@K zg!mT=KSe(>HuyXZ{V zMtBe3+TCwPBhNoHiprVH>%f0r!u`wdJhdqD>f85p@@w+#)0QUmo%d7)8yk?j*|lHH zsl)zRB$JMR4fNR>yTv=J;ak%mer*B|7bGra*LjQm3#lvAbMR28#^~NGc-SIs{Z_aT z=Mb#cijV~lTXihC*Mf&x6K>-D&%xJF-K#gVaPHpdgJcfyurOk<;tX;_mCBs%Yw*cB zPh!)2;-DMNM_pAOU@t=`NTn9K@OPC&v;cHr!J+UF(VKMgHmWmWI1qg=W&7H~A9L3Z z2bpi6FA-(?U3JVIy{-|v*(-2R_z~;!Y;bTOZS%{m;9yJu(;o?NaA|qlxddH2-`<$) zX9ux|d`s?(zB1++vo}p&-+^;r%7XVEkc2Pak+tX2I?QXc4l!<71-^R32dgfjlPmW( z=Da{3qMhQg&<#Ggdb%w(2J7@4QNxN=pTWJuMWaE>8);Kz?mznUnHCH&;t zwwqy?gYGLzcY&`JFa0VK9*A=e))>rmgLlFs1FELzE!1xx3FPvjk=Ak7hrQq(H7J-& z1MirZuVDV;0-n9eIi&>NS?W9b-*>?K*f#CU1KwRL?78~H2J_F!<)^E8K&l;34x1Vk=Vyy?8d)=}0krr(yr?qu}AzO|rS$!9)Lzx>vsE(23Xh zoJ#Gw=Le*(X;G;%|0sf=+Y`Dgb; zC3Ia(Q_zcioJYDM%6e}a=KK1s2V%j$B3l{m>LB>mXnXH!4{&c_MVkpDU4}!(2+)zM%VQVgLeT+S!2HE@Tb3c|1@+ROZEcVbxZI$#A(?sbId8u zd3G|IVjozlrReh+8Y$Q}aJ>06=B`_ZO*&5DbC?{KmQ0>RPMP&UYoh^eem?r24{`tE zJ6`L%B}ahPMC4kik`G_TirR`Wu6ObcreILHE2t16P z@mrSz9+n5m=m&v^s+M`1<-tRRZ8mMMz{4jm->Pwghb6vN0!rXvPhM7(>|>nsOohjM zhfm(ZfAfx0JbZbwtxfg=I(c?~nPmoaAz#a|=*e(A?$%qEp2HtU?Q1m1yb6vPv0dMX zoX~jmV!Dk7^qgZ-JGT>b<1HPx9X8O1!6gla;9xwHGS9se;Jwf#{&p?+{rn*7$bFcb zcF6nwRsnl*pPrc-OW{xLi#zl;z;`ckvwFA+eUBQ$iNAYt5gVB=bj%=^yILrl0UvDV z{6u*GIiTR#FWtlMkmt2|mcD$6b6Ua|lxROj57Kq=RXX^${h(uDT_Dc!W3n5mbjQBh zR~9c>OPrtDt?R9#4<2r23m=5dbG1=L;}CJUnp)Tbf3ue=KV~VZxN7k z)V{P3KDhj%C^d~eTi!<-Ifjwb-3^!;?MB`={e0M?9lCE-Sin7SuWa_=>V4o|@EXs@ zHYMQ6$o_zZ1?U$VCAKm@haOv&FK?MnBd68+WH!Lxa^$PNkVB7Q9Jb2x33OiPU6G}K z_s+Jl?EaGw3SLSW#;=60{WM{%RE-=@UR$`k2)x^`E2=&O-tm?vyw(Qq3cfDl>;>`Fjx$JF0e+Xf#yW}1>K1>PB+F?#w4x-L|aFIgVC&PBoK z`4{NA)@7Ok8PIhbZu%a&VFX_-lu>or5a-A2sN8)6oSRcrwRx-$pT4haTjw#n?^K2x zLPs$#{X{9h{m8ry{1>6{PxQ@Mr~G{zdYj1Zk4g8wcjKJWbBl)$(a|%w4w*&JkoPxu zHCBO(5^HSx`aALYk?P%tCfkvZNzpF!x8duptTk_2;V*;R>;j+@cZmC%h{Hd7u}ryU z)`Kg1*6dmVo!IAV#Bc<@`D`}Z7aRCy`lgh8L*$5#aS7F%O6X+!%-ikd;NgKiuYM_j zhu=2G7x;pQ`ahRtgg?W+@j35wd-N!F!Z%lPrJ;X0R`bdpKKb^b(8p`B*w4+R`t<(l z!qwyVYa+qz>Y22!H}U+BzC5`Pe|&6Z`7rG=cz7~ZH02`pOVsms_ke?GB(L2c9OT## zyT}b3RQqvio@KrQ=XdPGRYx)C)6jqHJ!Yy^kNGat(VfF>jWdj z3&6j&_Cm(2YxtaVZy8HJSDZ5+m}2$S6dYX@wtA5s_DuS?_BE|2PeE_3Pl`?(vT zj>F(ySViOhh2Y+p?ZJSQV(7Paca^$4oKt$ue7W^g^bXSj?dRcdT`e+sx)R_&H!r`R z4V~A@#$P#o2f3a2kLp}_n9=yx?b3;}fyz>g9H!cP58mt}a1i-s-uk#X`@Uf@-`nDxN*RAEB zapHxp(-zFhcnn>qrx@C009}_goGQK%x{h&jn7#nCKnOejLAl>Ra6w za4zar#hl3z%p=w|u|C#8|Gckkj7b|mSGcLjT610p{u3eYUwo^N7jw_u>Iave_|&iJ zqZ51gmt{d;k?-ZSeIDw?obeqi2GWE1me2P_J;BAcpijn0;9`?Q!M!eUiEM^0TktJ=4mxr6N?5WAbmFu2tv*KYa83br z@u?U$N3?)gDB&lQyk)#w#R3dYclt{)(8Oz?- z+mtz(LMYF5UZ3Cd`~m0b)%|IUWAF3X->!SzYps0=>xP@zwN+lDPv)Dr)A%$Md2O4W z{qB3+X@Uxo@aenxmVvDdQ?ypweRc5{o>wrpkmlsIj>lQ|< zwywtWKVlz}zr34tI{IX;!@fYfQ)V|@zu~@U@d<%VP1vu@QOf?b41H>PeKkGnpL?;E z#MHt+o*hn)TtYGb&<&3rK8^W?fbdmG-18F7r`)25{Vv+}I~rLuaIWMG@6ubFu%GV* zb*NtGpYtGgK`$`p5MSMS{2uyU`y)4UA5CH%u26bKRzLOy-!31$-Hy*=qehPzHNr)w z=|3-PFc-bp*;ZSM^S8Yu?F8ny^lBd8+gR6Y*zYHxhW<9tQs$z?1MK4qJTW+koENS# z)%OegR2o+tO!kRJ-?}@s!4iF~&9V6x;aJDpk#@R?^D;c7^cA$jJNX>d)**Puq4V~% zBD@=&Zane)6#Cr29Xnk-kORApebL3bo!rC4yC&#kH*d|`dkMLY&-TSaGjd%SBb9wG za-H2`)tXK?SN{F`&lort7&Mk)cd(O;E2?e~DeXM!59ex% z4j+DD0&in-{h8pLxK;lXM?-k~XUllK0q!AGYC2}T2Yoa{(2ec-e{Q@8yg~mwD!9RRGy3Ol zDYI9;$cc)z;iGqu6MN6sZHYqPES|!yVOER&H8tWO9UkiT`9D`K$9$!i(smFY?h#C0 zq74r>FA?kfFk>AdGcNQgO{3IdE2lTVfpZkV704Mm6-o zHzc+8Kl+NfZ{>OF3(SEnqT032v0N8O7YUZIq+#3)cO3 zv^pNw7lgPATZbKK6T!fmxWNzO;3G@d*1- zJm;UEy$7#a-6r4P#=aCqBKa@|IZ)}P_*4YuATl0vSy;!r;b;(41@DZL3N|QSz`i_d z)ia~;&Y{#tVHErB9Cl}n%fUObpd*}*ux`hft9{MP4Zm06{Xd(~$F>R$dMP2-@dmGP zc15nMnkvgGLI3)gZPQsL8|;5^W7+;0&Sk1xjSq%%H+1Gh_rtkD?d?Ll;N0VLB}sa4 zj#>Ek83#DW(yg&Q+6eO*y2!PLz3?%fT~`v$8C=ZKh}1`a&ystZVK;v6F1x8vUG%}9 zZuPIz!Sm$S>rXlIcVEo^2gLo)r^voi!uIvgMtshps(sxQ-p8f;Xjdk&juvJbC^rFz zj<~y2jbWYZu5E-Ve7tupim_8p(H*HnOyjF}5A!N`qrJ|5pI;9_>-R>M)aSbpt5 z^CDc-^c2sSfs3y@eM+0)qI^cjrx>`{wOYn-3tUu4lo{re=|#sbR~muUyI!K=+l_{dc7~MYT1u_0Ogc}&CvIHNvv&Y*n)ny{B_MP zX%f z$Xg2~`<7vzA+}teSLi9u`8GwGe#IQ4`m1@PS^^vqjqBNsoR=FGL+`(aelsYBn>7qM zGL7PYKd_T*s(*jzpL1o#x0;G4{>gU~BAp2Der{#;j>eqAIDyx{5`C<(_HD);=wk(> z#iP2A>)PMxXq6z>Nh<_2R-u3G?~^$-2j`q@nF}qkPA4>G7uN{qN`x&fPQf|y)5>o% zoO^R)uxUA*`xv+U&^&S+i_cm0<#5jT?$^&UaPC30=Z(Y2aqd^vi)F#L;vPSzjs4a-A(dCPuurCV{D_n$?vH6{c+{wYe=izG--hqR`M)r>t!8R} z_r?5AB>uw>-fPpo@^!9}ysa6&JpT*xP?zB4A7?QSPH0G)UvAW;k zqtGwxaDk6253lxNgO4l%a^Ek*M?0rU-CpFz>DVUTt?*Gjmb3C0a-%}wNYYj0M)jUg z&!W*!U;BBu|J*n9&2GJ4bg|CJ^rpXU3@*+-Px^BfE>_O641UGDMZ)R(S2nn~;rqKV z9=JGVtt!!roLJARDeaG(XqNSUNAm~#zQJcSzf~jm(GM^`eTRPAR{pzKDV+V{+OQWM zvcKZuSql%P*L&Rw%IPMHZZ4%4)A8q|gxTLISpSn&@%n*WC}G4Es&y0lad@7H(IVjF z)t1qWK;*fpj;&$7$gkH!PMDm)`l2E0kp>5>KlU3B4Vhz|lp;Ox3G0G=QRlfYp&!1! z(f45M2CQR_Ol^D0fqN8E?Uz>kf@7;?)^Yb>j=`a}G4uoWOLwg=48}Q-OqDI-D-v*D z!P4hqoH+O9`PRbfz%kro+Ii*olo|F*OO}bZt6|<7>LWENiF3Z{)IAcsxG$Bv{#70N z-OljmyZ2(9@2K4=sUuyTq`B_W!FIUkIg&FK3isNDh;+}pihhx39C?Jfg`MpIfz<(+3n$t%&cM6C zKL#9X@NUaBjx}FSqMx2~e^YuKzDOQn8FR(HnE|<#4#;(TOG00*K(3RFcwg6Vi}k=4 zyJCOBIo5f*!OaJ7kHYLX@#}D|({smCemHltJpD!q*5#6m7F2`aTs$S|zAO4wrK~ln z&d71aq3s9#k>iYOjxEc8Z>8rRaDRtyGvY}cI=kR{z>CZ*_;%@m!%J!Sc6Z!s{d4%{ zFhsr@!#DSak3VPBa2`(l`TcBFtWy?jV>oFT zyW-q5eAHc&K6VX0I&6N_%KH<2@D9_?5ctRxd->+K@oo}R&wgk#eEiZ<;$aUTw-0>z z>Vw>PckstyFXYCFvgmjd$6@qPMXd3P(i$^Bm4r)lu; zVjG8vIXnz}Yk4;Mc{iz>`|M$sjmJ%U_`}dAZ(E#n5J|>&GaPJO-W8l}igPFRSsXKtxON=@wpmA_qIItK^s`D*(L@5p53l^bQR}54E1Xw zPhjrxs$`G+ltCBiFG|&A+J?_%dm*TNUa*VoESt7JiG6(*?|;6zHidmG%WgBi=)oLy z-XZO7GxnKun$Tyekh|`E7{5~tFV-rA?#scwP%%!;|C~cRAiahy4>@l*D!x?Nwb*t)CeWA$R( zSWmcMoh>T+Q37(Em$VgON3OH|V!ip*A>4OA>i_UQoMTe%zE%L|cnoq*&6;Dq@XX^w zPH;|ioAk$@$Z@kyiI3Bf<1B+j#4jMn?XESdIe{FPfAPisbLdk~CEC;{!MCJfy(1L( zc8cZWF$hXQQ+T)7?`^nmI`eR9|5lt!;o!Q~q40Me@;{OI4?pNwo#p7ZtcT1k zu|Dd@gqrT>dWo@zushF|ooDDF>RSA-k1y>Z*Du_QGg;C@ss=WnlZ2B+?~Yvl@f-X7 zY&)~k;pCH5c6}CbvXXjuW&}QNp0B!g8adKU;riA-_;{N2!|q-1F@9cZF$_Mg@3yfl zfRE^QmRF&#c6hk^M$vcdkJ)-hC>*)5iSN^CW#mTBD@x<9;i3=U?$i9}r}a5*s}Z=k zUQ6Yx0$dzDVY$#x#kq~5R$J?@=tCWp ztEDvcR_E;wf6yD!$g!RsqpQ5j+VvZ9e5WY(S`=e(^ z{ybxc|EF?t{3kK*=vDvv{R{4=54h;yhkbx9mJu3;@K1*?E&HT@7y13zvd6=&i&WUk zcAwS8z4YNVY_`(47ly;3c7YT3BJ7S$oBxITqFxU9KI}t&5j!Cp+JgNZ?P*W+;2v8~ z`MNtro#cnZnoYYhan3jL`N#DS;FOi;w=Kwd8^3y_+eP6VN6Z)BfDoK3lfRJRb`kT? zJp)gcox^!x3~ZF)T^ZxhyWtZ!_qILGn+JXDi0_$@B;-0r{=K@FF_(z9(J6U`{ z$W0FGbjp{dW_sWp=MzP?W;nNfe~|bL*5$sa^q$a%bAlO?+3%3!=5*(zoRQ{ z0t3qGIN=-BN_iw5u8qAkEwO}a&lwC4a4KRSw__?d1+HCU)gH-(YtaF1lX3F!_>Zz- z=$1~h?ahi!L7TB28Ohuev8j_Bv*q}lB=^_9|1fp`^Qpa0Wa4|1z$wKN3|&B=Ckl|I9!uW6Fxdi9lzI!-1w?^mD)b!#uc~3N8`~?AGhNA z^9U~fXf}R#1}+}2m^!lrF7`g2|E>-fe@wNSiJ*Tr&5X)QLQZ@v_s;#%N8~xNFEbM8 zn?slEPv?D$zPOCMaDs=AS0>3Z!$VK|C0E-r;O*{)%C`^T>-?od*KXta9PhilJQBIE zGS_e@0Qc-`@v*g?#9TOUoB9zu{QjObcl8Z0H_}TIY}|(XX4>b^zF3Ps_=+{<+@CH| zmu2*aLhB;$q)xXzDCr^}7`80>!N0XdHOisb_eWd3ZU3|t?mKX^UHuF54wwFn&%4*b z%QWWA;!APw)mDwVlS7yT9RJ8s@CALHeTB1YCD!}5BsZ-sglj^v)br?XbvP<~ToUp5 zYQbWK%`tdiXYV$T4#WQ8ive*qm(V9OEga{BcO1`O3kG>%eQ>&EE(z;)T^h$rbkWB$ zTKMigid;7$v9swX`q#ZmZ0ow z7!J6m)WYok1D=hQN~GzOetzJ0I!zXNk^L*>hYX&F%}1q`sCp-!ipopF z@k};uJE_0^{ZAzRgAay9K8kPMh;YX<_Z|C1~49(k<~FXw2U=SJaVr@0Q~LQe^wpT7Ad&hj!oa`ET+E?!AVKX-0#WOFQuMuDv7&Dad=5Y@hq0fA(8P|HOivC?NBC z=0^?gyBfCqB7nJybl5IaFL-$UT}ysf9{TF9;-6KYVBd4gHV)k+{62YdhhJRBd?&&7 zg96qGO~16KZaW1(rIk&%Y|&S9{%Sv`i}_B;XSZxwoHrg2DA~Y<_0ilCRe?dAe^WGD z!G<~Tm&R?>7w|84)wj>5Ph-FIQ-csEobx!Fyh8PfEb^c_yVoLX7ny%~?N#It+%sRM z-n*+6`;*IL0(2`dH~6?JWhlRsoG<=;v?LY%ox!j3iMP;?imjGAgua$q)4%85WjJ}W zRYefqWjB1LC!WIn29u1Pqrt)dS>BwyXG!OqWxR$0Z$ng`d^{WiZ=>FrHOgMKAT&uUd@J$}B_4X*o z*T6HI9e!5c$Y}u|tuJkbYj^yfJy;6Y@}&aZI^kL1^_HwUIHtHq)TRcG6{Wqs_!*AX z3uUNwOJZKaQv7aFqLaKd6LFA2y({SBdO#fOqH|H2H^lIHPDZAV&7$yefz@I?>VNR9 z{`V>Uk5|CWcWcnYRZWDeXw`4|RXrp!NaTJDAN)J87&Oe=Lq_+0Q`10=qnPVo<>?{c zgx5)YKrLS^9MmL;%Q$>AihFr<1 z_R!@KoJ_Gjn@xq2*2nuaMv)`iTZYuy=dka1U%p&2`fQIN)iy=+*`pm18*jo#Q|gcY zLaaNU4GIXjiN5*@z4fUma-;WQP1b$rr&a5waeNKyfxLRi6J|E0gEN54)2!@BMOGn=9&HcyY(3h7UVm=~tu(b3R_TxNNlerXv zzTcoFkKr`dGozamb{@hxm~DZ)uQbs2rx}|^3t^75(y=LZ8uz*IFS@$CM}J$HyN@*y z=Q)n%y-#w-J^5wlZscjgLHSeFJ8+Ldz`1-?(x zY^=8xXa%PxVSmaKxj5@+0niH6xD>2kINDL zZ3Mf_2K2Ad_eYO>g>!yFmC9@2obTfN+D7!NLu|VajU&hPj~?4~41FrQ{b%pZSce;9 zXmwYHZ}RdK8GrcZDN@(@6S*xX>tWA5e|&5!_QkCU*!J4PX<}pZ_235My;D%;b-gBkY#0xq!AXCG-We*Ke8S<7kO3#ZrgiS!4JWINuD?x3j(p|uTeB8E zJ~Qc8N`Q}SaSP9Q;A6=1C8fgXtEUwc?6c8NuO%b;kKiJ0W!!jAJLWE|qVEa%XMKht z_Di3T_dbQ#I8-8EhV*+U!^38gLv|Bc@VB*i$)|gmC)YSNyP`j?XOEqaIRhtEb$`bk zz&+AWcqp-onE!0v_G$eJoQKv{JwAwS(=~X;Rc;mE2hW}xTz_l}&shJ6w*7!(HciC=ci~vCWUs;@IM&*@s(T9@ zD|~EU!VkxaR9{MSz%idZ$s#^DR;ap3S_Xc}yR;uLfM0GC(fViMmTTt|jvTnv^ZgTb z3~m{&WExjPEjCn6i(ZF)Ka|`f!)q}IS++I77`0p6`D4)<{2aCCfikE;%6yi|0{HiX z<8GHAD(&v_ulH8}_3uB4-T!z}x~nq;Ekxi+{|x(>a1Z&DoJtKtz5V-{rVwg8bJAqy z`W|9F`!q!v)jMeE^lPCW5~dX&rH)DoQD-O=>>*1_2HK@j{RFh{-(1&2oJ>Ewo`s_h zsZw_>QS;`yBGTX~F;#6GgQJyHa(fG^o}uK3BOKlB|EJdi!- zo&Lyi*JJn?`ALP773+>PGjZtx%wZ-B$^v{bmv(W!62=P`+cH;}ZEV6hx6>X&TIieI z#i$`4;i0=?*@<;nHw@RlyK!k8*8M*E4fvkJ_w8W$u-6hluWyn)QVjX@vuTnM&V|Hk zUmsLX!g;vENme2_=XS-WqW&8nJk;!4{i+*%8LOz1LJ8bSsn@Ye#(CbAN+G7@1920WK<7jnlOb2WdI8(G-VkMgI!vt0w%J|(O_aFLK%sahaGA zc-H&Pe_#f=EGf;YXEQwO7GJ{}3CA)yEh<^z*p2;6+tT3IU9AEpJNQ-EyVh9_ehsg+ z?BRr8TqZG&%w_)XgUzWePG$i2G4rhZ{1Gx2c)BgAV@QMhmuPKI8J+GK!7*SVj z6VkPUQ|6ohtjmW}K*wm zl+2he0ncg#A0I}Q{TjPxHLCS0$&y;}9^xz?RO^d6puJL2992oX|Mds49^$6=e*H;Q zgM1Y>4%8KDHS$kHdkEKsge^N!wb$)P`M3dnbdk<#E7a=PJKPjF8@059X&-6~Yn5d! zd{y0;WWF7>QB_Gb9=@Iq4&OWuR}V-%*-lXJF?`>48Lk=(2lW-e)o&uf)HZl(wDzg< zI6QSE(g{;=)GB#$XAc~mdQg#53`ak*hPIuBqjh`h*Q|!4#thEvH{qwT$BQ$AaMNn1 z-zXPyrxlOGeFnJ6Fmw6CbL7mx8N==C;H7P8fVL#OG&L)I^A=7ri-a&Y{YG9qXQ`ot z9BEbmb?PO26gru|LI8cW`}g_KLCjx1_VSEgr(z%EfO`R79nKLJeDoE3h0hUgWwg&r z!95bi6^ErRAqR>w``Q|!pJpf*Wmt;)|Kqrxp1+6ly`8hq(o~W6d>*F-j-Vf`Kk(lC z1=iPA86~vd!1@`>_QIF&u8=oKvcwg6r){}{iZwo;vgBHKo(bO9XA|qRk>f_6)tFkt zH^E{yiFnmcqVOw2_zhfZG!WjDfOWOR__7;p$Z2ctf32Q@XJM(Hle+M1CSNn^8ywr- z-TbQtIn3ass_!@Wb>!HQ(_7)!&W71vPvBPS#bKLWaEp;OW_ST!RsH0C(*Un3woF96 zfm1q}Qa8%rl*C)!Q!Vi6OTZ(sdHD2EIe2&rYWaItJumo_u&TMc3?6+FX1lug2VKcg|9AyBmX7_F+1NxhTOMSyZtNlTpS}msWqU|wzV(HC)K?2G5m!)e z_umgSM?HF3!B`lTcW6`5piB?BvxGk(5B2@2^VL46Tx-f!sGv@sT`n^#jlXXd+V>2# z$);i9I4b2BudoQ}4t2qq&r&^vYO^SQ9+gGgZs!KnNZGjRw~{?1ARtN2231cYc<~1u z?oB3hRuk17i`0CkfHF6uS=C8ak^BbND_cIR5 z!c+BJt|@LfS`>L#AO(J|vFUKEfScvUCx0J6f8JMm)O#xn+^u_mg`Kg7WZ}ONh<@8J z^r%ojeEjXivX>Wg81wGmCqANoPP4sl)&dXjj2u3v7lqFeNF%SMM`S5&h^_53JC3xdh+-oL4J6ri?!J zrNq07^4Mn_@RW@YbIzfng5)>oFZutJY*2(_k0>S~TJTF;Qz_;h+>-rC5q|);cF7sj zs^L{ojnAwMyt;XBa`ZKPGT+b_=L?^zw5`rt!KIc~4_`C56mg-((HR~&uCZ>2f2wj>T*|f*QzU zb80)PcTQOH3e=xr3`z9mfBpL(Wc;Td@;#DN8z|pI91AOTeC5$UUR`*54E2Bpe~L9~ zz~wlq0qRk9RR>j68VgNQ26ai~feousYxYTLF`>$3sQHX-=^^{Z*mK%YU+WvTR-zsZ zy4RkK8lmO>@D{4|&Q>OH2MVGb+Qt@%-M+=wnx< zOP8UFP2~#RLAB1-H9Cpgd5LmU_6~7&zH?7+r_^IN&_E{dhls}+2_-YFGBQ!jEeWMifW;=UZF5H9Q6tS42 zbOG<{A;GBaTAk$U!EMiS;n~`K{cZQ*mygMq_!8u-KGTCAlHik6Nco$K@W@86nR6rj zVV6~5vVk|o12Nl&;7PtES@{}%bSJG1EQ1%0t9aUm;lfL^$-?cZ?k_8*ZvW%JcmLn) zs9VDyo7}|v-^*b}K^j$?-z%V+89wRzUGPMu$i#oxfGYB=Mwhw_x$V>7d^~E@ZAM93 z)Txv5f|96D_Ia32GQq8~`aKn>v-!oz@u=5N_0OL~l`7}sFhI3ns)&_DEq7-yUxr$m z%(|+N5&L486>@4&6AhVWGf~}0?1vkuH}B9__@T0O>)&!jZ8Dp-GDLmyV zS~1kJTcXpPs9a`m3Vt&nPc9KP7(rF~F#50!)!JA7#=wURmy@pJDtuPs1*vJm`v%OgB~WIC<@Rrzei;_k;3 z^1FED=m4tZ4u!{e()3&`&DMa>2WmH5a zg?z0#&@`V#AxayZA3n*UkfH$fJt=tFU zy7WiwL}hSE@{MJ5!nv`k=jH`Eu{6AM=iU=KsoSTZU-pJh_zw#gE`FdBB|D>I70q<= zY|<}qNgJK)sovk2PN$QBr`Kk7_t1&cmiC()`{*Rm>hfUd03CVg{d~X>ov638?U5d# zlW3bYH*S8X6WMD%{Pm-B@<*I`S?>=zxi_5e@O6w%gb8UqieLqAc2-VC*Do28SfiKGV}sPA27I3J^K zzDzkvMWuYy99j8`P6pLHnp9D3YUipepRJ+cHAbU7wY~r z)h42z5L|JJ2R?MxT^zZFx|VA^i!+--P^lCklC|Fe{VMKq2AxX{*~? zC?u-y{ij#(>(g#s)w7)x65zODnQ=e9|I+5w2|p-Az{zd4_ZR#vQ@J$HOeIIhH&-eM zP|0$oAIB(LsKi>0N!-<(N}lVywb>U&C7&eK*-!USNmt$_PKD?;;^|45mnmr{p|WYt z{gWM}J~4jCH-knJq7uiYR?^8QHK*xY+H|sd)y$y03!RvMKfi4;fKHfLuExs6z>RCq z&n>x6CxwjZeP7ezMbynVf%$aO%oz0g_Dei&=rHMDN+(4ZV>^5+=p<{EVPQ!Pd`mmB z%kv|h%zE%}W`3rV)^Y*SkVZN=RI;s^qlHeq{VY~ke1#LnqMWuAIvHX*sk$BB?yTEu z+ucql@>0P9ZZtZ{^cq^%0DtuzI;_@p!RbH8gbcgsBspN6t_wWg_UXQwdoP_lwu%*S z_y#9WUwOI+P6{WLT zaAwS->X|xx$uw(qZ$RDK@+{aLxkmZ^j5`OsQSckQ{Q@=iyh6xPxFdJ^c=-mndAXK@TYTGZF2A{3b{}l{mKOnbw>F#Sim8#){pH*Zz!a9L3er|JZc|0ZFQmy zuB2C5$H66=@YsmYN6ma$a7}&CBqqYEB~lcNGQqy-#nwS%Vz*=BI%^oO1b) zt|;`8LR2s3)bhhC%Tj?Lm3lbz+9x@@kwT6Rjq7v4E!U&=9~-_>h|~P`Z(re;lUNMj zCK`Tz@JcaS7rw8Jyq)`oe8|0U^wtn6mrGnNJk!0*aQ@j(3hq(39O%D5AycK369<{7 zWPpADl~{Hvv9vekkA!bk8xlr7OHhfV1k0G565LawiqQ=y$-&9 zY~HUL@C7-ttpCG%ID4%qZWAM%Eq}90T82s|KbE$bXu#XwWxixarr^wUwxYoS9L_;qh6+ zbrr1eIBj*Ed@5?=;T;;=;c{c-%$~QX|9Zpxec(U&3ivcUtvU#gTIIQVh2asyn<9fz z)MlpmfJ(SjKT#?07%o|JJ}JJA+$1owz#9UeCUE&m2z)Y~2$_$CPYc1D^|FzpSU;bC z`vp#^+8+zyfK!?;b3a&pppbj4>I1p(D$qXS(0X{~V{oY<`7>N}eI})foOOCRqt6K3 zGF<&;b#XI=oC}ICeDsAvJdG;%=eJUb2h+^49{4r;`9p_#2l{R4_bTt`$bB2bUYzfy zkWF_3kGjLLzO29_i31ee=lAP3?+As|cF3&ifM*{SyxbY5kUu{NO2o}lh@Znn*VNw> z@?zq|j$MpYqP+f3Qq&46NuKvte#}KB+0RwaJ%eupj*(r%8>nQL&5N8kIVxH2c9DTo zg-R5+{~B%GO(h18M{Ls%Qc0$O*hc@8aPZ~c372px?i;-*Ui*|vM*TiK`Q1V#@h+@e zIM~~WQuL2wNB6f8ovi}B{Y7oW;jmq$)An}K>PMHmUfGVhbftOe{thy)ch*kvO9#1j zaa;XWRT?QCex;lgOe03G?0hUrX@q$ocG7N`Mv^V`qeR&0L}C4ST%{D=-}OyBRy&bv z_RBX&na~MWNXWu^JGghn_X*7no>iUKZ9hXN9NM)EW#52Dq8va~O z|M4vjx$&j1PF(`}=$i6Xs~^zGdNxxr$|E`vE6nPUgqO;S%v-p!;ZLrTN=hDlEUX*u zhnr7251tu%K_@iRnLByKbn?MJZhBV<9rp&l-<}3P<=*dC>3mBkJ%>9~C*L8rzS}+A z14pgdX;%uW=_F?Raf(|lon$;TJI?$8eeCCVC&S^Xde}tAY#ltjQ+dYXGoDW>V@(2F z^$!WvXlg)itvV_+4`0ot_^@VcL-ihG>ZNl zhgW~{T;-XtZq+{3Z6yk?I2=v38^NpdDtYO_$XPrW`cpr`tys5`&0A!(i($q!^q1iSWmHMzGMA0C!SC>FwU2FiKRjz4jb>dt2_IA5=|)VW z4=oX5*fj@#la#p({@~~1qkA(LsKh*1Nl^*kty;}gdGx23r928$sYH9AMR126l{gK(I)2H5N>0vi>|J!E zlFLUX^vD@137eGXFNJr9-t5`6?jeDjPm%`G{*G4$P&n#;< zZX>PPRHN2gZMe_%&XMx(ZAAKfgbc4$J2}jz%e+|CPNIG;MFNPdd& z;Od1AQY$;;*Pufq;;wtDx&mmVwR-TnZZ?e!6g;ySZl)3Sj6!YZDH=ItogaD%9&QLT zW=s&J6Ej{8?~96XPxLus(=POX&xLNUF+)E3r8!$*1Ang8B~GHBUQkk(V)vwzO$NfP z^1gI(a%gq>75L~KJ8?xUgihW>8`nuk(uuCndgVtkbYf^R{3z`fom@W?y+;F1G9D<`uU`+pmfiD;PF5x5M}L8zH^U$0WWmn|+jbitho76)b$W2a z&#ff8`vLlSRdGjy^;LA@HaH^`21lb@V)8nXOS=s3?T|q(?Vd`gb%dvCh1*@D;AzU$ z+jE)lboTn!{iVpMdOaW1tKh2M`!Ta}xcaX*%HIe6ldpgrXTnTjb1k7qH!r(~esN&> z&D(bPMK@kLEsfkIesp`-75MeV(E8+e__e*Pw!jsBt*=t?pF|Fu;XknC267lThh>Tm z`bn2O*KW2R3eg{1bRFrXkm=qI=5Kw-lK~I;bPv`{tYR|PP2IxDvV&XDXk<+et8Ti}GQ%KL%7h4P9T8R#KssUUxmf034hIKYQ zOWCm9tWfp5O# zd2x8(HhAdF!&j|FCG)M-9@})O!Mr(!?Zc;uf#D#@xex_qgTN<7lTvKA+( zZZYVh5y#NhcCBADQZ0AN{~;H$X5fsStYySLz(Cf zGjq&cD$iW6JA}Wtl;!;)Cpgo0ZjX>VoDr2fx9K#U^l2UDPdx`;=S(DH;A8TAqs-;O z_;abV246UxJbYNVqdbaEvRA*hUlWUUKn~OL4Y$!R-<#UfeHU|zor2a5_pttGs{B3$ zxpFdD$|&a{+(~;s8JMs|3Wb~fGtD8Ma5L%hp|e_W^U_mF{ycK$jg`wO$>`gYSsoqU`UWme@IJ_cpUzkP znuOu!jwdav0?@}N*V!DegQH6xu6oUZ9J=J#_ZDq9`k#EW|9w*bdIiS%p0vu+Yf0Y| z_ggB+VNoJBj5%uSVp z&*w$BcB0qFjRmgF(HciIm%*!&;=wEyD%lrDzh;Tt=Fy}2QWbsa%Gn4ZS3W8kvD$K? z3%;$_biJG}L?sp^`*yD={%k*f_lh)?{HfKsn6w%BELs9rrBjLfeUo<~>Qs{Nv}xgz z4wZO*i@aoHL?xRRb#8O)rxK1@EyvNr$bDI%Tp}J++=F0c@##F3Vo7%~n+qU2P&$SZ^>-fFbYud^E=IsswYdUZ) z&}~x589A_YBqArHgDemEwr=TA2U!`}8`dX6BLWvglzmNT#Oh)u| zutqR#4lbe*rQ_@@)r~YF__85w&max^zUAHDEzpScSL4WPc=*u9L9z&sN@bX^nyexs2i!{rJPVh4R#H-yW(U;%M^cGd;MF(?r-; zs_jGnsek@JQXyPZj0`AMTBMNlgKwEymm;4<5bh+*4_c3leGWrEs>Cr9cn`TvT=8su z7v>2X>0LEe+*Bg?g8%o@RaDZlyDDY?zJ>Q(-_Hf#WQGFzFJc{TN1n_(4M{v6-h6c* za@<%`q1Y$%tFjh!#^;znh*~+G0?8W2!#x|wsU+vSnA6D2< zanAIdWPuBnw7<0AdVY#ZCjOXZwO*hShJZ^kO7QOaK;`4fJ5(Z~wfJ2>174o8_4a>F zCGso&=zpt6e=D+Ycg>#HLG8qC?!i*l+II3W+T;2-M+ecV zzhlO0j{a9xw}Jh72T@eWaPX|{AhLNAsV{zakP~;WIE!qgkvM7B?l^O}rgc_P;S7xk zCzl?0A4?-*l@tS(92)WMIm@%Hnns3x7R6e%(+I;u&qH0KG%~S-u|;nYeoil!?t+H{ zw?nFC)?&Sn$C9-|68mKWWrDpG=w$97=dmrwiPF!55Ax}tkB;rH-DyZCW9vPCy@iVf ziIEl0tl^<&$u6QkcuVL8=ALOr7EGw+eqYs`Q zO?&_!r$Tx;vaTTa4L@$Y5Q=p}XMu8o2+Thma^wS%BmI43Nl6Um61>a2KElbuB_F@$ z|KnufnIm3s(&CutXLdMwSlzfG^gf;BY)NYGMy|ZQZ$fGVa;3$1dc||MZ*v@00u2E1+@eq3T9> zw(`&3Eh}dzge{X*VG*wNZ|4kPLH`+cp(#`v^8z~4yJiQt=CwJ6{TW<~^4;-U1g<&h zl82e-N3)xEZ99NDf{%eZwHsP6Cxf%*4&xi6rAvvhrFx?g3n5z!8F4#r6u z3BR}Osq9kBg-_sv=HVg7E+N~PHRva2H~LD8W4$k~g}-eR9OPIvS)qh=yQX7jersTU ztammzUJq{ARBTK$Lf`p2mwSgL`stio{rlnKEwhoEW+!|+dU$yHF?{sXD?6=9^2|2@li-E|zfGU3X|qnQ-!7wVf(8Gx5tbbAh0z{`KVLH<7QpMC}8K0I5w z{$dkpw6rdcgKO{Y)N@NQ7qyhwC%P1_$@@w^JcNEUph3O29=Xl?Y4vkQ+@>JKq@o@0h9!l$70w;jn#(nYb4NOZ?@H`}uf;Ff zT}{vrJ1WuETjBdgk}|Dr;Zo66Jz4BKv1l9SNIpR&4kv#kzW1S$awYHdT>3Af{I=!&%wWSw(Ltcwv*-^CettM+6mXCGY$7*+ljkH-JLx6cc;f9}3(?L?uG z=Y|}-mj`HMEopF)pGJSJS6Y(FfVuDfI0hyT`116k?P&pcHh(;bLzGSw-HU3!%fh7& z*yZ9eHm>PJpIu&9l$V7Z*;)L%%?3HLndgVa z5A@rV+93{?SUOR$Z4N4jlR9OmUM`Er-2AcnOL;gs&_n;G11JB}Z}z`W?q9D!mA>CE zQ`Yz7qKEVX3v!#$)}Ldpm?t)*}&Vs zj!MQqr%5be&Y+{b##^N)L=Jtcier4IJe7RoQ&(Wy zP9-+7%I4lGR5E)-UVps?m2lsxVBmstXE{bUnd(zXfwF{YpAmeM@ExV1e_d@5QJ`!M z*IF;;EJv=hf8-Xm|0tChPVrsb?nxzUwTvgzec`a~eTkyWRFYyLZ+jHp^&T2S*zjp-qS%mS`i^F2gFe8gNd*aigqt8~J0Hz0T3MjVN}rbS$FZ?Rvs#Wbztw zUMc?g^zJrtw@CB%S+;hf*pOA*q0)|h7+2HBk7B(~y*zd*zMVXdeDLBs{Hs~GUDP$- zPJ}NUurS%wLEe&CCVm_Az4;dlcZYQlgE5}GHTfOHICQUj0i}a{>#z@V`qM!)hi-Wu z6Gr~qC6uSKlSZta{uu5)fPPpinSacaMs`=E&0G$pk@+R&n=}$>Bs1Vg!Xfm>tj1#= zKgwtrW&d0^P){QkoT*tZbQ&p_=$A|yp^>7?S5yjSX+&4o%n?4y*t+m>!N-Zh+hr-?$bC2O_N=>xyxH+`&>uOHp|+5>HS6nN|NbS!fBS)N zg9W;weD8_9aDv4?dvV}1%q4o{lGm0X*M+BVUnA#)eJcab zpIDD$|F8x}_Yp5D2`*oIUd@k6bW>~8V*}w=^Fj=gano zH>RUs|04X^y#RTzT1b50Eq;#$&kgp-c?W)W7LIjb{-GZ({PsJQu>KTSH~)u9f-crO zG;p^O1)qZnmn7Rr2D{Ci+0HgnlfdyR&`59BMicz7`(#8C}Y$=EuDE?(pia^;k!&ZC!pw5??>xFdL1&xgqC8kGdkx z>G}Fx2u4oKPhvderHQ%n)=Z(5=$}<|Cu6Pl(n+h^XXOQD^uZO z2vzRDm@S-Y9^115E{^eXhmND4=K5gjkcm0Wo6hxZ>d1}Kzsg@e@}!fuDf$-&(N~wJ z2A*R@U%hHp@-wR+_Whil^d5na_rnEuTCxBC;BDj`#oh-6BVNa!UBQK)E;A)-N)sY1!v zU>+)zkSJ4TWgdzoL<+^;@12CmkR&AOcYW6S{dd-V#{1moKIiMNmNK>1+K+Wz&+B?V z-@lyTQ%ANa(oH1cSA%3M4nxQ7+G75|3p!5XI`3E={HjyZxk_dD)wnpd(iU)TIJu|$ z7C1MtKKpziIOnoQlRFQbJEtR*xD=cl-o|?)-2gnJ==c1MyNGyQ#ja#i>`CNW1acq6 z&vE>^w&@u9$Q*X}Kc4`1%X4h++^{(ny7R2yo{T(vzT)N6oyaeAdP*eQp!2Sriss5|?;;DW zq?QJKMo#=LdY{)g^yYiz{w(AfPu_U_*@@m>`?*isUDw0!PH_desME;b+%8V{12o(- zp>lUP(1@kojC|%b8j0}X-%Wo&Bb^uCWw1U2Cw(vWnth^?WtG&E)vR=)|9S6ppfsIO z`Cj{;7}JT28;3!JJDr$)*10T@L?@!34L9uu|ME1VXd5T!>ml=RlFs&0^cdBPkLf|NJ^@Aw@pT*?S#rr%1Nd^i16ZMW)VqCxr1b$a=T-iXr49 zvWl{+rO_MI3C{R>)r>(zuRs2xa*jdxctTb<`Y{Mc>%3~J7 z=NbeHh=YfkzI^fG;Gvdt=Bh`l(X*b~`ss-T{AZ$PpSdh_S5)*KSyG6FQOh zvuVpF=){YHS5gABK9a)zhrBm+(SwoscH0_xOIpZC^8~m^UEmxu1{ZI8-hSZ$E*37n zTI&KXPCi@6PpqNq)ckILvc*20W@Vo_{Ip1O@A(4gMhE63zb|L8zc-pF{2RX7(_LF= z%niQ&_*;c~@R4t{MA+iqyzcuq!SFBg50A&%S-PO(G#)Zpzuf@NEe&-43cu~xxE0KGZV2=3<2lFPQ4Sqr30V2Z`X}x{Vv?K50N35 z(~+C|RKLQ%8dFUD#%k|yt^uFxFG>Dr?jna=Cv=7wIGe0+E)2WONvG|P8#(Vs?kUf>xQyEV;c5IhIo>(x7NBO#>kaovSTq3fS}TELz$8@CfF9pM87N zuh7Z+$Cgf-DRkn~H%B>uf3$FwCyL+cWa9kL2Pt8SIJ7()$=9IBa7UzRv^7O8?+8CS z>Q9k8{?0$|QYca$p)X@uOA&5=?Wu?!iWIdHsT%lUEmc}Vp)iA#-OL_&sKCJUK0MdH z(Lw&9-z{Q$6nap3*@BR>404N!=sEZ>$T?-7Jc&r?MW?Q%t@jz^nDL^PK=|W72eX)u zAU84jEwMqafkB2sgcKKdFo^l^-YP!y3=N%1%nxD@MQ;OV#8>pMqw<80bpOHk+oO0( zhYdMxQjn1hc=-9EmvD>#_VW15Bw|*9cQavEH;W@b(U3dfCXJq75mUpljp!xE#h>~M zo%mr_B-=sgM4xGc-qQrV9A=j$vhyRkA|b&~*Tdf3q)3L=Ud#cbL&Y!d!@O`;{fo=s zqG$E*;Dg{|U)0r&?BJqPn7T$J@)ut!fo**c~7;M`s-RtpDk zF5}ty4Km=|t23&nmVt9-_sL>eL-^sik&|xluZ4q#YkwTV*5fb=)gs8w_F3zKlZxL76jfY zq?85CMS-77=*b`MB7a%Ok}8^vUQ5BJj*pqpq5Dr>6NRsBlYG8+v=W@VuP%4+6?)RO zLUkwFx=7j?t_+3lE>c>km{K>4T<5*(+U+x#W9nsP=Wx)7hka;(iZBh&^$pjb1ou9d zR88=LdoIi0^yV4TNP^vpBl*WM-xD$s|Kvd<`=7J(9*Cq70p#xd$?%R~~M!T3n98zd6 zqiey#fyQ&((1ouvm)lo%fvbjGXG-Cd6^s_AEJMFW-i<}96FG{Jf2)izdNyeW$4@2_8|~%zMPpOOaV~yna3I5U{RJKMvol`%5mmL=p4A z#zn#{(22)h-h7azj(xW4AGP$6vm~y4oKdt3c?JL4Z4qjM1arH4hdy-pyLXXluIcidSKyPs z-ZL5k?>sk#r-XxdAu-ZM*TB2f8*WbRcQ8kslY8Z#g#KSxLUU|7`h)5pp0CP>?`{0_ zMz{=n7MkO?2{grpav$x1cod51Ez+T&jr$3hL=Asj)?*XyNQgpIT z=;0M(l|o42k-?%{02cIn0qI#KAH_OeW;6J0I6>yN;{XvdW!HpBRMMqKPHdVrA% zqYLkBq==`g8OtRjits-i?36r9k*D{+e$EP}2-g}NWzjT>+;*+02&q9&=F4H1-xNja zlU7>&nM8lug(F9Un?YEcpFHgohYx-|&LgswL3ozNuH`a-etSoa*MozXII3&UgM-7> z?CDZo4AL&@@?$a>zStry?#CU>|LCD%8_}cDa^7&SqyYVzQ1{yrRSdF&db{xW3V~?P$)KbxhEGuEjo7d zofozRoD9~!qX?a7LO=d08GW4cPjjdG;GffKk{xC+SL}&87tn{iW#Kgs>2z>W!A(0_ zcRze@)?D9naB=dXU#R}!dENJ~MY(_bf9tv7wz`gPDdF39uFes8#GGS9|0>Ms-f)?x z{D6NgD)P87fn36K-7Ckn=E!ZeRLy;$>;5+FxX%k+xA}lkODBA+%?9ov`dQ2oC)(DF zU~V^Y+h={e2kru>MG7DBM$W4v`_|-Y7fE<>C-N3}H~sYJ&sE^vLZJoxKVrK`gpiNt zs{6=QN*YKa=6G^R$%1}4T_iI++`6f#i^t=NzS``{ zLypmF(B2XTf1B5R@)iF?7x{R?^w)kSrb5eF8QdplOrhzQ4a<<&CKZ~eD4 zIKaKxD3?0J z|B^<;57CP9Khlt!+8xXPg*=3HeX^neo&0ID{i&izCyVzni%uEQNr(+|fWTSg9?#9b z-U^|Ujt?y|7c=R^SXM^568sC0jBh{ll}?zNL|M*ofp^j$jGjwVBrUt!eL@#|AvXrr z@M14SChOG?NneWW2`Ep{zDE(iBcXKHr^rWEMu*k3P~=0ykc|j(kzWrV_RYZ$FIua7 z#+)B}al)7R&7~M*R(9x|h#Ka5Qz0v>_rM=Nx^H1-0e#o%l)wTGo{A5A-Es-M{GIgl zO(283h~KN) zhF(p}{l~VVJ(xRI97zrMiaz#V!yp&T4O_BRZ~pkjApN%DyLp&#hakVx} z0}pi*xQtA}!$SJZ8cFalU`@Gf{u<2p{1R8pVU9RHnIX$9gFj=YNxwXD;vQit5Ivmg z1#G&r(1|_wP5m^X6GPmjjgKH_d2nFu*4^;Wy=y*u@xedyB-9=&Lf-OkzZ2&FjGV!R4*Qov-)Vi>a(xx{)1C~| zV!%DwjFiB;sx zKHNEAcW8ZX;fnrW@K-s)`U2>-Z0i%v491y{cV|F+sZPRbsjlkt49 zyZrkvqm@&2 z$e9JAm(IPx9C18Ac`QW=_y6=i%jm#2dpZwR79n4ekiFnF3!S)In`J@}I#FwMhc72| z;*8ajXJ0hub>F`-ubnE(b`AR;naaucz`F&nIfosR z&&?Qyy^4pvd~W^MA_abzA>pT+L;S$R}YsUmwj{~tsXrUnXXhdwg$}W zY8P`nevAFK7gN*EXkDc9d~%a465R`!r%OHg<0Vat?*5b!?Kapa)N0Y88j>t6g&;Y}+JsAJ3ZxZ*J_f zb!L{aOVP<90gt$o*mJwfcvmHCf!x>2Mne#}uS9r)g*AH5>jT`Je`nLlwN{VTKJf1Y z^E!su7dn~#Lm6kXP{@@Vs84IaGldsz8`UTxvUH|B&Xgj%LS!-&&Qavdl1~oP*YSDM zLou_76p{8C=GQ5r2(Knxo5I}$mywh+WuK8Bcf`ASOhYI778T7bLccG+&)E!fL7gLf ztMfK8NKu|#0KX>q7TYWmYXrY)6l1y95_!gr+A(c#&{m0WGSGuTaGpg`?i%*%)GjD1 zN8$cf&*YW-cm~+kSkjNVA^DvC@a0eZ9yM=DOlQ&Od3s1VdI9Ew6}{|X z;9>Zp&_i0_;pxu0GeyggdqjNI`i@@q2Z;y4KUO1eu^-HPwiX}D`n|Kn9P#Xplg+Q; zn}5~~ZQ_M*Zaqm0kVU={XKbDwsXE_t`L8kHU-{p92K^-VoM|9Eb9IV7@UdY^5+Xw` zxC4;Q;_i15_f9^Ri0?u!`+7~>1;{PJ8q$wnz#NawUU92JF1Wf_=%!K;=7gJG+1{wceF3#Hu1$5A z_YE#~Qi9HV9k-S9P6y_RQ@w+BAG^q8)KupK_*?b8Q4WX4!BzgO6%n)Oxh$En{%0>u zCum?GmybsFG`~s87oib(v3jmk;GVRj!8KjZi zuBN|2Omy-L-@rW1~Z4C}`>bW;1~X^F{YI+43)xkfvh zP8KYhE^yDqKHNT%FbV!~F-#U!_F*4xO^j(X_CRz;%$H=Y1jiOhUo6=|k;1UZ^D~AN z*dt78d@@#}v8HdHKFQbRbiQCwJ(3_~i}9`v!+7 za`nfW*7biW;*-w2a36XytEt9~m)9}~@6vP86^iINKj*hyuf-sqrJSR$jM0->nJ`iS z4mPnp&Kp0&AbXZe?2dA0kb1}Fbh7Dhuwn9CH|>z{C4vKf`u`hxMnI>~aGS zk1tqv%@I7jJI3jy1Rj>|y0oYXxyr4&xprmD5g$b~D=QqE@45Udv+cj<|E}5HA^O;* zl-yijp>z&8MZQSq!$061+i#bHh2ULx-$CQs;9dFgu5S;(yPf;((>_KZe_ilY*buzC z8^4hEdmQ#dw)BQKCP6=n@b`3Mj<@;O&znlw(1|^l-5cO*wNwoYA0fY}|8lg%W zYBi#ELg$ryQaQl`ou{^J!xEJ)?9+|U_E+{G9}d|(kUa$7e3z+!`zQJ^`UkW6=b#I@ zxL0U$(#Wq;cI9>a@ULpDW=U&kWa7wvv1j1kg;tr!C~(haqnqtI9o*wn3*+=QL62{j zHNQJ@UHtevB%b>&AqX{2>ZQTR{69xAlIFa zY0G6mKbkCvar=Rv*Yztvj+0KV>{;=C5WZKUUoazBg-*CPe=POG+>g89v2)Q$I@!h= zUm@c|C-NO>Q55z*bRN_UzR9DLYKz(Gg^hG#nIFH>tCvm`!+aZ5=D@|$P0v3FQN+aT zfJ==6@{JWfcgFRQ3&#dqo;^m9kfiIkaN>0Ywf5>ac!;4t(@1 z=$lCsMFgcI?cMFgC@xl+Yp5wLQ7G#hmn|h;V(3=*d4KKgA1$Ppb z>{eyj$sl){jT`CvaBsEkwi%BV{O-+eopf+8g1C(3U1Si8JKgU#`(sa}Qs|CK7&sTP zT>eEYK98o<_4xsV{GEJdc=s{%ALlpn&)(e$1O8RCN_;H0KkDF11_?abmu?4L$Rf9U z7Z3W@{xL<-77PX{w;LBRfln?}UR(ETh=F}%GI{`WLw?gF-;>BuW@7q(ZJk3d6VBt( z1RloSF{)a}iG7lnjTU;~p>fn^e--esO;Kpcq!6B$qS{!04ZWK(UUAW_Yv*;}e-8uZ zKZl7)F8OA@;iq@xhOR)%Tk!7jH1m~*;GIp$<{uBhyMtZgr(fSj|HR|y@%7-H&H9a3 z3hrb6CMkH`?Gf^cyvi$%kHN*L2XRUH(1&%aPV>Xp$~&;;g!Rjj~o#-0QY=Xh*WRhMI)l$)j8korxCu(r!v^A z;am6e-l#r@z1-tUL+qII4akW8=*1pKn2eS6u|yhK8AD6=&&9o}O*5=Vo}&k2|I>d6 zx=&xZdA;rcJ}+7MxBD!O_^%z_7>=Hw>e2=s7EitUV6c z^X<5s`v|=kOWP~a+v4cNacGqaX91nua{haE8TjW=$-2huGy2dqm*p7PgF8{m8Dzmv zk*^7PU)1F&(kuSK%1N6d-U)Hb{~n>peZ|l3zrhFpby>@_`zmzZ-KhIKchQeoIeLCi zHbu<8m5eb%2S)TtZc}cjNJV!HU)vY#&9xsF4f+M0nE&Ul3}umX2vs%(QV zN`rfoVk%!%;CH(hug~3u`v_iK((U^hWbuo17F%%8r*U({32<=t{cnwZ7qEAH?9q=w zU-YR>%wjx4;D4nOG83ZFllk*8)*N%f+pE9nm8LUD^Z9ATihKr9QDpsPhulPQQTV-d z^sLP1^oPWSAAq7_;JjYR}pH6X0RnXla=~c<9lZ{y4;NUiZy2?SJkS z;MvFbjBWTGd7w6W@Gy8c*6Mu8=`L~)`@q>J*e_H2vuTekatk`g8=iL=@V{i3FBiVn zQQy`0#Z%1ne$~zhAisDXf9Bdl^pV5H7nEOw&O7XDn- z;{(r+f_pCJ2K-#$-mr3^`Qe@5RZ?S};Xdd%{srsaSR(f|)j!kdfaea?mR!-fggp(5 z{bqXTwcNPf;rRi6SNTc)$Xq(+hf@8PwWT!D(H}0Q*o3)X%wgO8(0v~&=jJwkr;+A+ zCe0nlJJyaa&NzU(E_a=e*{90WiIALSy4_AX=4{v651P@*jJd|OOHOpMYT&hV+cot3 zw)O6_!QNZgrTd@P719Z7Rpys9;Gg-9y=(XN(24L4pQEL}a1Wo-H%m2c9>uJpUZr|;D?S;MIb?NbRMgia@S=G|Jl(8x(8 z?n4pU`1_SNe+(NzCwja4Hks2%D9?k-EA8>TA&Vt-!7wzFFeP8sRV4hwH2r@%n|n%qr`PiMVTU zKw)ibkSO#VSDVs$?0K-&JriZqr<44P?i}dvrBwu?=U4m3?`R_O zkR)XnnJ4)7CawLl;9uuf_ZG`f;N!X7cV1u*xa-xu@*Ui`|4eR~=phG|cwanOuKLfu z$91)bm;+v`k#}V~PLX{QJQ;l#a5vh2__1yfo*#GO`QlCS6sh}ayY^8IMMOy}Z{{=X zlPuPIt^JN7<2J?@PV`dbwSpZ_Gxp~0uWJ3`$cp<2A~9bMEW;eHWh^g54EJHQueXVB zM6bEGw@X}|LA00kpN!VSe%foJ-rCAKJIo4W43I5pLruEt) zEtz^adh$TP@B6{glV~vCA6a zYmd=ZF`SFxW7(Zt4Uk`aO1qbCR*Sh`l9$T^=sYXljmYe;kFL$45ji%&3f&4CNz#6@)a*6# z;}5G`SfKlK+QcmPd_#_Mp7VzWGkogtdkcG(;cg#W@y8wTy@oFuRmIh??<;k2d^6^L zb8-D|&K;){jZ59f-e07X6puiKGwA)b20Fiy#on)(aMHWwPtkXYf7G%C{Id^EG56`F z6U`_qftjE1#j3f#!WTi;jXb?kD++%3%S<>U2N~#Fvo(G<{xr$tGq9jY&yQGkA18`j z3Hfwf(;s)Sgg$9T+@?s5pviUDREp#t79Agf4(!@9!o$)4{!Q5zKS4hx;N;uH&tEBW zGj-eHLo>K9_ z-Iud9O~JDo_v>4Zq3`V5@~#pb^i#2T*yDzLc=6V_M^|uX;TF}u^alL2+-ECs?AaZE zFd5Q!2i#-(m}rJMq4D)l-)k8R;>cq6!2$mGf#dcP?o#N)i9Gk?=+iintrt(#W9}F9 z(Qqwvp?T~`#_e|8{kng$p$_>;Uc1Nb68PlF&k~W&@X0c1A9=@zF<-pS75IIud7gj& zKJWhd@ACh@0_FSj&&6@HksH?{HqIiykleCYvjjbryVoh*bm+X{qGLasq4Ul;dfaI?eK2K<@F=;eej-B{~_qBk1@!j863A>;Jxg zKqm$d+59KLzx_Qimk9V*de_aV;3J*%al|@9!ro zun+u8XG`FE=(`uM*T3J)AmQt)U#1fH-UL7U1qSF-Yc#ZvfP>2$m+y4~2N!Mej}He2 zzh4&;-v4ecri$#*VD_*=+B%k3Ep=z9DY_-?BrtPCFex){50+}NTj*5j0}1- zx{n@YwCA7)GZ7S~RfK#+qU7zFO7wNMwmsE<0YC0Bq16LjsNS}#SQ)yIm+kkQ!3XeH zC^~u_1G&zJnW;MXiNEQHQ0 z&I-)+PBtxyy@EVrZzcD~Fyy#$ zovXf#qqp~9a6@m-3h=D?vu7i?H#qyG$pGAIKP?fU0`9$jEJNMifqQ!uo(5<4(8!j! zp4z8}Xk_c@OA&{TBfo9c-n$R^hH0=Gdm83^n_HE*j@_UU6XUo2Ubiv-8=1SvmP{i{ z0c(%N(BDJ8elbTuLWj zZ)^)^7lUrgTlZ@3W;)T5AEi%#D3Sex4)rW1Y>K|X~ubaH-lyWvXQJJ=id&Q~sy zP7Vj%Tw|Mp`}Ydm_nsHgiH+A|M?LV*c6aIGNd~z0=iHCRarCC!R=C%o2ThmD+3CH4 zBC)RaA$7P5Sk(H8HC_|<0XKL1upOYtOZ(YWHtdDmHRGSY44oII-O}250Q)P(0saCcoMzqy+Qq> zEVvJSRB+v9^kjPd^x8*OqbIGgL2A7W_T5Z^GW)k6hwwOmWb+Q_!!0t8mhEBSxkA;! zp$DN8`-LJNfrAPB$Ef4rV7+65c7rQ=EEmJJF)rhdmQwdn@>TQ!dyLiAAU75ljc7a& z4gYJJ$g&G_!t+CN%O)RU&+b$3x6|;)(;cFA$%PCO{Jlap3Au@Ui~ioD=+m&K1m9_e zE=+!<(Z>#5*igjw@}E7tRo;S@M>^+q-~Z0{{`~i5VyX4ftD$rWyl%_*>gi6+?pw+@U(7To8u2-iZtwHDMOqi5K|M zJH!P&b~kt#_c9u}{ENlkANy%Wp%n)EBxodm>iPI(aPPS9!Sjp3J+~bT4zhuJD-N!A zb~d1q(bnMwx(6|z3#45=XANC=gq!oL1NbMEE>`LeJy*#d_c?$@YCbl5+DBpz7-7Ef z0Q~O#x}@hxnaFV^o&ArNU|#sq=;YOxxMyYmzDJ@1dGBCx9qGe9obY*F`UF1DhOv-& zA)WMWo5+KYx~08)2wq0W4tp2VNq7KHDVipvx1_~O2mH%DU72EyJ1`1j-?|f6 z;aB&V8|0z~6A;qKeozMemTNvoqtvnQCK_3K3Ufe*RE7)PiXu`s+B3)CgKIApIi~sI z<7cf2Y*ENPN(wl+(Tlku>38H=9=@J8aJ4vepyb!;hAnR>(!w4!HO+ue#^$XS?kBW4 z$jeT_4>K)EySm z(N)-Iez!<<7`jkS)kt(<6Tbi7z;~%{E9dp!Jf!|ZUV&B9krtIy1JP9U2)0E}uOms@ zuNMBcXKU1$IrcKZqdTggQ=6Z)^{fA>%v0u>^Y_GVOM!ug{FBIg*p6zO3 zmfhG-Q|9{1+zjrOsZ8f&fP2^516+EQ(PJL&UF)j}9rjjW>2-bFs|tRmJZ=L2>(k$u zX+Y_2bS7cp1?b0%OV2&_#r&?IQz<vdb% zfSe;GORHSx8GgP6TeN%&cqx}!b`83(VRGM1lVR}Ke+L!+n?|k}ZZ12u2ziHmd~w-I z%=>&j)nnx7Wa!e3LnRu>dwKdc{x-ziZolZD`7!hWlUV2sXF4fl_p|Xu@5Qe#?ETK$ z*#FJl8Y7)bCn~ZAObR7*lF=;Uav1!Zy?TCcGKKv)JKqVOG2Bbg+^2DW0d(7|rFVG+ zkbAs3&Mdkfx$TPboW`x_yLhaADWng+<*4egAEiithso0TGq?v6zo3_f=Y~jlsh+M2 z#vT3P=TcU2xTnf`J1Q-MB0N<>b1Be)^~#4b57r|m7MG~4>Yzxb*U#nc$VGyV&1jq$ z$2?HMbLCn1VLt7=tcgVo^6K726J}xTi|nZGxhsx6l2oybm-5J24?Xt{RYgxvFsk>v zHuj2r>IZ&-gWGI=>Scg~Mck*)vRh-HBW~cL064g0tdx9kL5^}*%=*A3_}bP{wIF}Y z?;;Gxy@PR=tD!SMz@tCQJ=hi6$U)5pKV$S(B((oJ|H54Fu};oi z3O(fk!H1Ge$TQBo^$WFK0-ZM7e2yEvJ>T|g1Dlnf%c^v4l;O_76A`ml^)ynX?ZoBW zf&Jc@0^WdL=szjj^XxxpfBb3e|5W^H50Jw#^Bi@TBgjxG-3`*xL15bcktWdw z{srl>+_M7zL}~S#7J+|noq9FikK*&BcbC>M;qGa1o?8O$Ve!0_eJLVA5#N|g7qyUs z=%n7WSd9Cq-{cl4c^`y+tJ;1i{sitrpX27WhYxn?{JZcAdV#mH{2Bz2hd7Nazxz8G zd&H7%cVqIgKUeEYAFjrJh`*G@pJs~K2O97;&?)l7tk`19SLj5s{Iw!e;NJklKad5z zK<2G}SC-!S_aTY?Ix^AnCeix4koD z5b5kIP11+qOHU{DDT0HVQ+KwFpGJPnm8*3I9Q+zSxFyLGJ-;o3axs1kV)uUKV&foi zP5tDJX5=N)3PYfttKX0*=K5+4Sh)&Xj}X#W3`j z75mM({m^IW$v(Zj=mdOh`a3ZNzr6p3IiDOU=J|DvMy7QF>J6jNUzU&*n~29= z$C?a>Vf6acRIVthJ%w(R+AP!i9QU4g7VH>;?%QUn^uPqVkH70tp~Mh+f8`;P$9^Gy zzNhtV5%P}8o%N<0gm9;YdGg{b_}*Uk7jhNK*w@g$Y4ApePJU1gEB_uukI!4JZ#Qxe z9q+8MT;#qMH~X(E-N0N=Ec<60_C8$GTCYao?$s|%>8p;V*bCWmZ^sGnuQ+cVmlqv# zzpzgE{1M#Gin=kk@GtI0FZ@=#p9gb485ZZgV&GnO+|uvJL9X2~lGD_}yzb?Lof`X* z2j9`J_-YN^_sQzBzB6)?-QFWsKA7v-bVMCqh}^QPr$?a! zGjbG-GG1bj}yHi3uhzfnZ^aKHY=-^fo2`hOf?ho9wn_OgZ# zxvq6mXcOjw%Y1V-znu*a8Q^=U%L<-OiRyIp7CIiDic4|0$&DsT72u3VjyxA=K}Lf*t3g1 z)u9j`1K!;_;pc=oVPARB1u@JCSyal~#UIae??2>CKL11ho3B7oe82-2<}wnjocJS> z1G$4B``f6c@Ri)h!dnGt!v-{%3}|gpFjT+xR-rX@9{ct z?}w8d%Q|qc+3XDarG3zeciB4yj?#$gg$+$3wlu;NaF%Bw@(nI_A0A5&_~C1_2Y>t1 zi10`Eh>u~=b%`~hOYY+PJlU^v;~|Z(N^^DX&jT+xmPa~O&3w;=$AG=j9I^Zt;f?bi)@WI~i6W>G! z!Z&jr{7@Z(`C!JRM>_h^w_?s**k6Fp+x7HH1$1C}*aM|u+)XeKxccK`7w)TSUs!n+ zxrlef`8&nfo0HqkXLT8V_+gvvp$;wvskkjV*C+s8wjlnj4d#M!5#JmVWRUC9_#Fe3 za5qcg)E(jN@W&cnA1rmTzp+!j*~}REg|T1v(jyEK)}mwL3l4_mm~YMp2lX^M4n1_n zUUJ?kXA5vJTa|Yq<%9X&Xq=_w4F*}4Ro0>wj^{RY4|uOZUZV2%9qZQkdG7r;-;nd4 z@PFhL(2Ln7Y`Lcm&*h?RO%#HTG8ta~72IQcQC)W)+_T;P!EG0~Cs^S0*BsotzGB~z z>g_bL=0stYt1fzed3gpN#<)8*byoe^5$xZ-`|7E69CO3f$J*zRZ?yfI^O(MX`P{Xd z{7sni&74&J@;Dg!?TJx>Lo}W{dDPp-HHk(doft=IALGx>p{s0)k(aP)eKx9vuB_fT z9`Ocx^Kf^u6m(y;__6L4U$NiI)v0r43jM$VGbRz_9SaHsELE1F?^67EybQkg{8LNo zB-}S}V&RT{Oz1>xLlEB^%>AV18hIC6V&C^eaLX}AJjbYN=Z$9EJGkPZ;$e#3UvIu+ z_s=-od){6#o0AE@Yu>mdpbYv^h{wbQ{Cl3=$#V((`@GEfTEY;WoV@5hMgNWYpr~@P z_+pCe4X{p^UPTdR*9z?(S@1AJA;CzEBGZE$Z(K14{4qLAH$Fm(KI57@CJXQZKTp50N)ztJAVQ%!5ZL1!{V=kEfuq3Eq zE&4Ko%P%D(AGxIb+(k|q`@{03GN;j(Dd*u6v(Q7XQS%{t(LU_EvBZyE1P5cg6W^wQ zgY1i53ETz;d7l2-YXAt#)t^}TC;9%_ZP2ID79b|PeAN^q1Joo;Oys77Z z=>PC5Fv_Vh5p}4Ij9vXa+XC)I#I@<20QclJ@=9ugdy41Zt6GD5&C2I4yw(BlZfw7N z-3Yv!8t?Z#j5*wqvzqzVm1pz-GSo~{O$_p{THvLfp?D=Yh)L|Z(H9L6|JHXzgJe=9~+=U)00<>cF@Rpxn_Vd zbRSL3EKUEQE}n|dAAbE|5<2kSt4kF(p#vYZeAoTmgnze9sh95r zFY|2m*7hM+QNOpX06oDeuRFZm@WU!!TpF|3&{O`J!Y9Uyy9TX|JGWylXg6Ns&bf|3 zR+frfzJ`2+=@egIF>>PRs^g+5n$U-Oi!BUxLoc#!y^{wHE@OHAs1qDKYtg^H4jeq6 zJ?-xS4)VLsDNj0KuDD*&T&1gHKF|Fhe&@}9!GDHVK)Oi3dg=NyV!Hp}w*YX@N|LIO z0QY#x+l$!2y%RYFYMa2lkj$MrDTdhRt@-rL6g|GPRrjxNI|e>_?w;L$8vW3<)W_cZbu6=JACs!tlET^}=f+Q!xL#5>;=IgSp=|UVVd7 z%o&-Iw4z?%&%D>J;;l6DhxFAjL-+Aa*=Q;ZB2PIICYt{f`Y~$eWf1ZXSuw>I73leC zRsNz3S0l%L5aYXD7JIxF14h=WxKFUYjk==?J}qEfHegC88z%Y0_SoW%DTmUwIv4a; ze3T*&`r_WH+La@J!g1ek(TbO)3CK@Y<#UH;fvYEO*?EG0{F|RJdx3vr_w$y=bm9J= z#@pWdLF^T$FNx#B9`M{;x2^*R{BF;!lo<42E(pq(dr4AwuI7xbC~^?FhmE$r+7z*# z&2oOQ5BHxNqZO}OQ6xc_Q&ZLvAG1h_M|oP<4vp53R%3J68|-yrqcMnq@6o=*N6}Y`3Ij5T7@=uH~P-Is50! zMz6yU?{8}A9^l0NggZIyKbOH57o}w9V=icXCULnqdei)$-bd>r9|?1?IVq=#kC!fs zYuthTv>^|ES$*t#u)gu#yC44dv5DmtGwf~97)pKMp!W24QO=fm?)_(Y56}M&|Ld{NSGx z6^~~j52@Lwyh!>U_DYPoQk~OqPw@O9#~X#XFBrxgd=@%z^Vb{V>!1S{Sf1RM^&Vf( zBNol{8TYt$IkNplPmsMcTs3(bcL}#AxqV-N{-4(M?2*Oj34Z;V87GKdpx{oXziSv| z?2Oyo3Tf=gy{UdVz6twk(+Wm`+t9C$T5b3Vy+M~qannEG;Mifa*^l60Zb4=6=bCx$ z{ja~{=D)*###f;ES93*&Ya6*foe|6m?&TGUo!Mjxy*DFtG{gcuKf@3qffMN8-5FW) z`Yh&sF4=rfFXGVmE&&93w@saI(*;7yO%tI?rUrPx#S}q{hOJpM^*!vAJ(1;l|jGx@Dims zEhakIG%nDRu^2uzOW*j!ayl8Q(%s<>-@8KTtZ)PNJgUuZMk(&Vy_W-r_GM%4Cof`s zMZ+9_ioVhAK20Z$of=Ki$bI=u^|Y+fdl~EzZYAhF8@*0=sF(y^MmY|v=3sB6Htwxy z1@e&Cseo(XU!i38rlwBhELx!)>%l+y5v8p$lbAEk1+lMK2p`(M>736p@QU5;QyOw$ zpB1-*Z*8Q=>hP`KcWR)|cS0hh40FK#jOQ=^*^8sC(qUn?!#pqIX4G5wU}fhgmFKQN zN7nAH>kOjEi3LLxZw&g*thW@FqZeaq{P*J+bRh2^=7o2m17pwk#nP@gf=1pQd;3caez)&U?~`ZA=tW!Wx!lRZ*Nr)>&MZQo@ACd~9Lgs#TyAy& zO}GQ&Bx_{+kM0Y#dS?mU_v)4G@%#}Q39s1~y7w22G^Xui-i*9sYwzVqJM{ec6E%lTz?cK1i)C2>g3Jw&mSf z@GrWeh&u5Fdhq(rHLgGL`<%XaIEn@PA3H?H?(w46N5ALjxCVFdKfPVWx&i$_({wwV zZRq#8x~2r`Vy~_Hgv=!qaL#b?_O0l{Jb0P0@;Q94>hG+d%i)6;zGVNYd5t20I-#mt zk%!#6Z`8$y}U z?vs_5Rp)U3>eg8E2q*e@!KIeN0_dY;Jf2ip3mus8b5Daj=6TBp)5&yl zU*}ptaV~iJ<@}KqmAC_AlHC&q{^gqb=?a2>T%;f;w;!B!anZKK9fSp!CLfDn4`krk z6aUtw$ZJ0x+GdD*2&?j5e!eM#JVf|xbFvD!mZ7xWdna_-_ECrR`!E-LUK$jSK8&W# ziOQbS6e+cXo-fBMsQt)%+_x&!-K|XB9 zP=5&>xQb^(LdFa9Zd6Q}Pheke=!>!3Oc%ayb+m-Pa_w{K)ht8qw0P;KL)}h(n2-Nd6Rj z@i)ne@5nn0&smvW;Kp8u>tZjh704gd-)A0%@AYE-9rXy$v1EO~yPgAmm#7K_X-@<6 z^RBKfojrtpN-D?iaO55@oGq3pIpgl%?+Ly^FFJW@GPfZo2+#X?%IbS9247z`CVvih z5BTqK9zC6h`=`#6Qs=?H+a6WrQQ#kwZOgXjAD|19Ctk9Ee}8Ih0uTMbp0T3CtqLaW z>n_!DUd0XHtL8&?ucV09z`2MWQWTkeZ5qe61@{kj4u{^^K@kJ7>X6@iDe~Pauwa83 z?q|L67T9zGJe`&lF1<@G;YcE34bV!G)^4M?d2J%*F@Tjv^P~7k%)F7d^qA zhhLd};fGIOTGf)d5PNAhHuAU8lW|;nl(-f`N~YQvg&?)}HTqvn6o|IM$!wv<&J z8d+_mE-Q1TH2iMe)$>(6@Vh#*TKZDx^%dHCZ+Aw{(Ud(UI#P*#AzMyDd_9d^x~~@y z0Nuw$7fMQo?t8m+Yv*h~jYzSTNk*aHEc|ZpuH7v7w?EO!19^uelU9BUADz4>1taz% zbh6~~zDNW3-a@0AfCJd`aJm&`^Ut2!mM`fOj`eCWx6+un`f-}TfzC!)bW zIr;cQF5qA8m(254eRLw2Kiy+7j@}K=vFDC|@%*H}%f&7)#{DWI-v{RC!L0Is!MR8h z`2$()aRWI>z6Uo~$9BvCS3G+?p$}inZ1}qGAVp5y;Nr@#LB3IP@3Pie^!erj`Exyx zBX3$)`2)Q`etX4Z+!1(wQsx;NQyjQs5Rd76?umy^F#7( z5&9{D{5NL>q35<4o<0TNYZYf(#|z(kam`PcHdXYWvw9~U?t;Ec4?TGebHBlzwFBoZ z&|4l_2|B|fKo9GL^{S1B96pH7cXM7}_cQHqlH}x`oL?=EkPsZkf zf3uMvb5>X3`R7;KdhURKZ%uQICBeTB&t#U@^wP=3Lnh`<-|6J>!_aN=bI^x%C&a#S z;l7{B<-%)1$Zw;%PL7I$Gr3pw*DIjsmmPInQJo_0l{2|Kdhn~xwDmOyun%`UrbOQg zxp8yL{xo~c>o&jrK!*>`wJDPt^r1+ZgwOKkVC(_sh+htg2FE@Ptz4G`E?V5IjLk%k z@TP~v0CeE%-Zvcl(1AgH4PvXI0~ddMF3Q?Qk&)Z<-g*lBRk)&VhFoODoyr4gW4J3A zpSN7_QU|GYeS5fxd7gX!=iWKDtrFS;$G?^x|ka$beN0z$O{4F z8_5pCgJSTlmb+Gb+CY(Izs4ONt0M1^80y%w3wQlYg|%voDe_#vA%e%8B3%2!;YM5X-Tq!S{YRAu#w=noimarq8b4LMI_Bo!Tul>BKvvy&=;8ylO2u z$&R_7vf^N^lMQ&c-r@Hb?7JB+yCLC-+&6!^>Ilvl}Le1jh3`2W~@({L=Kw(UPNQOZ;#N-~u~ zL>ZP$QBp}n=DCze$QV(gM8=e4oQ zeun$G_2t^GT<5gTbN$wS?8mXz$#ROI&gFu){$ow1e&X)1$oJ$T@apRqwb5m$@9UBH zehG1}v%|gyPuYHA;KZrps)9IGzY=VT@L;QD%}$roj^T|^&_vx(^y}t?vCC~R@Civ)vgKV z!TZsRD*uRyARp0gd@D^FzTbj1E59hh=QHkDB%+D;fvB4suh}_3ic&U|Gr|WvknS^C zV+;R|U#`j6ZGe2*?C`b`aqwaWKW09}!KMagt(s8-q>_#LvJ?4`+bb4{Y(`y-(b8R$ zb9q>YHQ@(SA#`AOp<9S;%`+mq`Tg6#hT3`F{R{P}`AhxhYXSD+&5Q!y?~#nw8x5|r zU1TKc<1anrJ1%O=%UCQ$ee;nk_p??Yf6?D&yB2ZpF}D}79dh8%@08Uss{Q2c11+ut zdU$V7gemVtlw7rGow zqW6=PW)<9Pz`xntqtUg$aK4KNyc}5I$Gy7M_-zT^XC$dfvl1R4$;xtJ*CpY%U1ayU zi#&+LO6t^2b?7zG1$L+414ey2-Xa4Za6D{_Z@Crb|BfCLSmp}fF3Zo>9C7ffUAD7+ zfv9Kc9!&5%3+|l=Z#)o-d2OSMqJ*wKBdTdTwpnM+bMBw-$)7*t`4;$pTcA(s^a{m= zt;9evAa*%F-b>kN^-@g~{+ufNwj{*8kIm1pb1PyUzv4^m2^y$le%V47H-J7A)4B0* zAJ!+>r{Qzh8u<)6V>8i1c%O$jvn}NXJ=YqQUmT43m8a%<5t03bEjQKZXaeSo++=@g za~<1z%6zmg#JX3%50)OT=qEPX7Zt<6zsf(uG5O%1#kQ*6zHY1=$RE2_2>jFM*ck2n z5qakq=OpTWLSOFEFI&qD{WkG6D*$zXx8o};ZU~_sdStCc#aiSmUb){(k;8gc8D+iZ zs>qLc?N*qA54c=dBJ3D^z~85@`94NH%*g3GRWptQM9eMnCHFDpEreSq`~9AgNQvH| z?VT|OKhFRhHcLxY8^ALh9wW-Cc` z?d&JlYrZFKHSH&^aXA-?koWMP_7j$I!{0A-nBPL)cUEZY0sRp8dh1-)jiK&u%0um4 zVj}AO44zy!N(bLmb{yip(ND->=>x;yACJOZ$iu(x{`(%aJi@^4p`Xci58 z?TYwa_5u0iSb?BtKQJ#&J!sW;Myy}DyQO03V$9D-s$RQL5WXJg1>r&DfrV5rm|fg} z_kJ`7oLzxDNbavJle5~$53?t&djTJ?ZFNXV-hpSNH%M~B7TbBw{qKFE=dWzO1^)3Z zAg=cQ7xRHuvN)>SZMS_ZiM#N0F#AX=v5WG{VexGxnv>V=zqflyvhRMotoFC=?{4|t z@}z#U;^)};O&Q4dF3hl~1OL3@+1n3PLf@4KF#ZAmqyj=1i^0F9qs_yv;NOJ_xmr2! zZ~4Q9>&)QaiSVlQ;VG=A@X)HLjRAZMGwG{99bjYUElEGr!8qJ^b`=!EI)BR~G~QD$ ziGnjrgTL}K^733vjsltI+&}(FnBU`k3(U8`zqbXZw{Q7jaHoc7$qlTMde}+^*sB9e zp0<*-lzeN=?pBiFnEPsgY9%2|BjZ-%{bWwh^zjxq4$IqshMBsyp zjH$qUzV+XGALh54Z-Mz1_^)q)?kRbR{v~xJTy)X)m@RFjU(}U;U!#qLn6Ai}&~777 z)=Pzn7_fJFR3?;{F908{_C$`{)qD} zFy8|IYAtYNMfFz!i8i9?`jPH@=cJI_pY zxiLlFGrrR7KhjI=l|Bu0k~UIkHpFXI^*8HxlmP1H0;QKY4r@APyG zMJ$I44zEw7NbdH!l|?D|ee42*Yu6}pB*G=?Vg^N)|N2fll>?5x9yv(mQ6#4E*z${M z6uHlmrl)s_B9HfqbdHBoq-!m2V%%|x*#0oPuoXPb-qu__v=1C!$q_eJtN>@-JQx2B&&d2w=Ud=^OAD0v9@ME|X(LATHHVb+DblT`bAt^$bKYjMu^rr6 zzr~k{3Ibn}<2;sz;qOh$8MM!VSDQF1PDF!GdTtkT<0#Tmx?_D#GDVVt(l_3^N)cgy zUFYoU6j8jm^j2aPMOL0+5r_b4Gq?arl?I_SV028OhU6k*~MuFbtm5rLB_ z^zw3WlhcsqTS$=)Vmf`^IDXVh=X_tB-)K{x@JgJ&X#3;G4bYJ)B`mpaj?kH}j^E|m z4_m1hvUrqLBD``Q$Zu-2pa`QYF|F=Bn^Vc!o0)JcJy79g2vMqIF)zERKw!^(7 z$$}(6uHygANZh^BK6z~{vIzVlKRCZWOWBcHs1)2>FAc;kV0I^gD+ z7cW@%f~#&h`n_Ah-GTGk*R0YhvMQX5t00~t2TiPx7B#;pTpf zc=o}YsRzvz@%za9&I7#B3|~mCevY{K<|kT58+^K}RUg8@BQYG-|%qXHS(A~cZdinj*jmML9+Q^=$=QGPN zuKY7S6Z7Xf-va+zTOg?RQX~U>f9H=;vAnw|qPxV)^DT6Zpt3?>O)zxZsU5GGk|{Ek zEgA3<`mQ_BsCFy#TO6O%6+!4T{#F64U*H+nU{2$jev0fncHwj38;ZCn?Uc2oQ$)OP z+;hP!5(umThFl!qY8VNa5B(Rj7M&5h- z7Tj7$BMUN@8nP{-5ytGd@vk{)#B@Qaycjc$v`^+lt@}-pp>O)~O5d>G>j`Vg2OK9j z+{IuR*CEdLV;`>LqA2OIhMu%xWSBbyz1eHE-`5-0TiBqi9$JI%kFxee--f?9l~9&a z1l=0ZAR(IxF2DV3(g9zx{-F*_*;$IbT*mKW=1UQYN1C&zZ$Y|4A)y6_I6(Mjg4GcJJ06Rf^oMP%tMp6p_mtisCy-5tgt0 zZ$HE$?&GmCOw2)C$WqDN4E?j-N$N%}{4~XZLgBN|pqDo7F?U8>`9gl3-F9$ogMT06 zN9e3X$-o~5zbNw4urXq02L9aF$yLR(6#1<;S8vTgBk5jWjxGU*taF~Mu4ko@t?Xw8 zy*Oy(&`^lyI5^d<#`<;BVj9u2ANCJiLL=eFR&YGxp^;(H@5-F~G$M5@@&w~D8j(xi z&`euSBjTzVq7Q{=BxNVfKV2B#2PR&f5}^^xnI~#Ct7v3(rk6%8zWeCU$gC8^{%yF~ z6nJT5opj0YQ7#%0NKKBf!})B#9RBtRxOjw7G@=t+Tz}Z!djMPvvDs1f4qUu*ykqMZ za4|@6YUv+vu|=tDGdtShE8AQ??<0y_S9|R$3g7X$(>9-V@FlzWW!sgDp+iMMZl;@=xCarMwSI z#^6JJh-MpF_?t~ai*qa z6Z&)bg)SCe_-=*Y@ieISKiSJKD{y?aM} zL}`R)-T99Ft7&AkSV~oC4UJsri_ha*OCxbLt;@bi&`7*Z=lM=48j*OB$8<}EMrZ;% zPQ|SU@3ijDdTyYR4OTxx_sY@8#BpX0c?EFq^i%87jWoiU$T}i{-?JV0OeNH!9dA4_O??6` zPJLGU{1RO33O#%+A9~TXPioU&ow%*4J=({KB5%bmD~KQKB?B)-9TT3;*Wvurcfk1z z_-|=}&2P39oZ8$=#%}TTeBMhD>$n!vM~4wVws|i|4Wr047YEB-SJ4kosXw42ek<`C z`B{g2L~>C4pX-nD_dOQRPQe#jdDqa@7XDj(SkUur==Z1n=H}KQ9?d#5@|%?ny6nfA zf@J73onFSuP8u{4+d0*zqe&w_Vh^1b*P@ZMszO<29U8eN!gKc?{$DQg z`zv`>obOkm75Uh&?55Bl5peRt3Q2}Ua4|NNGnW&b?cO4L30$kg8z7CR9#Q}E$Vn0DjPPy zza0Gi^x_tb8?h38c{=bv&$QoJvq=?k=Xg4Zs@gWLC-7TL-@rj(J^8)GTko5a0Xm+^G-L_ zRfOJi5eghorjd)i{yeo?Xk;w7pePmm5pvGm5vWchw^KYn93eEQawKZ&4c7S8D2@QURG}7eM8D?$-zV4%K-?E2B zmN4As7Br@jDgQ&Sf9?an4EDI@?*~`o4((~)i~W=L92(f}=GoHWTiCCc+C54d$K9gD zF?${7<*1vYCIHU5Y&)EK0bH#ABc7kQp9LAzy#Uv;Sl7e8HcyHpP@Mu}Uq45EFD zj&b^LhOZd$q;vZpS~O!%5$L&3ZSmrKh%+rO4{ulqjx?^{5xW5V z+EI68ahU;)yqINr61x+53F=UU$1WOCIi6;)XE*fX{S0n7aH*rs>lHV6wZDQdZ_)%@ z^$kDy!jwjyi8buHc>r9kZb=tnTpqR`t24uXrddyI1~0=u zepV_17k%Qy7K?4C5sTVnw#(q+8Ld5Hi=i*gr*>F}gNypbXYWmei_cXVw|at${ysIY z-hqpw^0%*8qdgvIjRw917wey&?h}Vkc}jeGDhgc8cX}(j6*{?h^d!?CaM7k}P$Ln( zLDS%CF7r1SZ-npYi9i?j9W(eaTm!wmbgJ=e81u{q`R9U z`>VD{CzE*&{-<`X`JMldZ2|Y1fo5N)UgBe0uhwSzw+?vc!R%ucsZbuv3P8PabhK@U z*>&VGUUc-i-bB8F7^-bYzdGdl!d2o4;<6>jY+1W0vS(I(%{%00r+*ujHBX|BuJ`uB z8^7WI2M zz>Buq!*;RIXKC6p77^gtBh5-H(StOs(=6BP1nyMcYQL*%LnEOaS{ZBYXe8=f=y?|K z>WEsb--siPG|0KTJ#vPB=efcz#}&NcxNLFeF!Uz#u$j{l`_MZ!TVrVE<#$XAkJ$_!}IV3hvagT{czU7{>4MM(qLU$|cHX7!$Oubsh3jLj0A)nZKpCbO}_<|GQ z6Q;b#>tKa$FEil0E`5T+x`m8lUyN}dX_CU)+VdRzAKOvqPwXGs0`_Cp7KPxR=9Y6} zT=2==BVDaJLn(4@;(X@46zIJLol(!B8%uQRE6=n~)IVwzh)n0liCUB&Yt(W=r(flU~Oi_lhIWV6$jU z4?dl-e?_Aj`up6SV?PuSwphgNq%yrS|HF z;5SAZ#+2jyUt4Y(kc7_s9q(Xx4P2aN?C<9R*QbN7UOWdbZhn<+Hw!LKjK1H00$lV7 zJ?ZuyT$K0K&$LC{AC+c4-3>0TJ~$ZH4=yIDr#miR4es7hn0$?KWx2nicNPn{_#xq} z6Y|Y;Z!TtOeQ>`jQy|8%=+eQ*T9@H#XxxhFMm>#Ng4yvj zjDMd3Ipp5yv9(tdH(RoR0SnQ0Oy zhZo$mLtarQs@z?(o+96t`~DJrfjD-+cJ~7KOnWj;d(cKv&$4mSvf(@OyC!$|av5o; z+vrytM|{S-byfTK<>;@E?B2ac|NN|6XhI<$PNa;3WGPJ%~Gy6K_c!L8a$jx5K|f>X_F&QE|>njZ&v+#;bbnd4L6MS-(C+ER`e zpznkxDyV31bajHRRSbA0qtx>%7RTSxe%Le)yfb!P&>2r7eSXu)yAyFd+8wz=_$)CT zI3suoe50`i-^PBF#X=)?pF>_GPe1cL&SQ*A{H8j%I&E*)zZu+(SiQXHA-E{udnSG} zxPA92NxgyVa{Q|McolT&lKP~jN#J4=r+hG{IrL{XFIOnI*lMeOZwg%W<|{sb1mgld z-Y$p^E;7rV^>y9~{X2ZC$8`hzfwcNgH!++azvU$p0bF+jYx8+F8rhaCQnqV~B5J|L ztV>5Ia`K3G(@W%^N~|otUB!Ln+~0M37#DIGa7_` zSDF{=5iSZ2&YXShCx!fHPlVSo=oQnAmwlbkUr+q3={TqjJtQ>~ZVZ3SvBK=4!G8E< zi9HjV=>PE#PUWh&ARj8Tzd{c2s8yKH@CxXv3McEs%HZ4)(*v`f;7rJZCx@Iaf+u@Z zSyqErCK6hguYpHBOhfC1z^jCh!3{|X_}x2xOWq`$$M?Lcm}K~OE0p57QfOq-s#ZSo z3XMqCX?C!r;{5a;oH%`rMm)Z$2+pP9IM0h81f+u_y(?XRW`KYEkv!g6@EHf+)Ux1H z%**RoI(}ztVy2*q{RFQ#&)N+x+So7t;DPhFSx?b9!BzQghVfjSZ}w(SW-V~p`;%yB zI=I+)m&fV4KaHrRu#Io@hF;4Ye31< zwnGQRNynE6J*G(2iO18EeW=&v)hHH6p3$1wO7Z^8-+2^_tFEv^AGyBe@8Si=80O|y zu7uu-%hKS5Keg9vZx=iI;Ro$S4`>W$x-{{;rAdhZ?Sr8_-C`#imPi_+Y=wKK8vj z2))#@HJ}~+Jp9G2<4=wveyg^6_z-cc!`vHAS#V;1O{{hlbeveJcT6sL(i?h%y#ZV+ z(0Y)Oeihq^_-W{YL;giShU%{)U*hU{o`6@YOy4TjWI|{8nNlj*G$PXTFuEcK{@ZaW zb%i{9-yJnkk`FFJ1qu6eZ# z=gs{vBpTnPKC=IjECToTW=7Rxe?{FFq^-b3D}m-$KX5+V3-?`(0~bZsZ*-Rhe^Zq# zjGMv50NbwZ4!Dj0y=z9Z;G%WtZRZql@xuqLeN51^TIQcWvO(Ye4wsQh0~g1M8y7Fe zf$f8XReycU2w|0&g?8ZUf~lViF>ZX5yEn^;c4ch|NMEE5e|2o#Ah$e?*xr0l#j_UU zgX%h20YO|(C0$Yo<5c6p7+#TSikvmwy8N$xFEtuGm(zoJbs9!aZn*D@C9R4Tp!bpw_L2+Qc2kb_ z81LWBDJP*WEZsHm>rVK4Hi|sgT;U6i?CvsChc4LY6f42^o+6DrNgN+%DN-ArRdQ~Ux(&uil8&%K3J$`uBQ=&C-qA%DJ0WNg3)`df#=)6C9HDC{o zNEhioI}ZI)x>&{Zus!PW*!OR?cLNtLWgN9YT)4M@JB$T>9OF30g-r0^Vr9$I`{&_< zjlWiTjX2aojdcEiZWA$|y21y(UH{4$D-V7JEh~~a0uG&PWF8s?x1=5&xaM?|M)s}D zH>ZPBvu$6N*_4Ba!z#V6Zy|2A@V|1P0)C=OmG#R?_>7^G;>Oi9a&+sOkI(Nw?>QS+ z?YxJ1A{;?s%{9nNOJ?oWy$}Ddv2k_%1Ju>9l)dA}_d|9C8%pu}+*9Aq?!f-aeqH)B zjN@%Q6zX;g=hNy^|3eVxCl_OqcpF^g@>AB?4L&b@aG3c$xHvWa@ntx;c>Hl)wJ5G{ z+dX>GU2sv{YhU^PNN_%a=gB9ugA-%)T4!)k`p@!1@BP3trip9T?%>^V6ANp!qrLr$ za%)p?d(t@1W(V}5Qm3*V+W*8p9Y+TR{LbaddS{GFeX&ns58=Ko@k!h^zy;qS!DlBc z@=|%a{gO{`pN%GoM>O*FeNiXG_cbHWCAdpRs0w)#ueXZ{^8B{e%}nRdVqTB-7sowL z(EWaU|GanaC8A*&m5mSP>#6^3y>b56|5Yt;TRcrCQL~N&KNY>_YDN*EA2+I#5!VP- zte@1wb1g5m?^fkq_&sce{Za7unuJFL?S?6`hRMWj3-TDL>8JOkEkgg58!`)k&huqF zFwQ80dbHeXXZcNt-?Rq;B;n)TGgvmd5on?^Q*AkW(C-UOb{+W|i@La5=clD={^m{3l8>bo&54!I?{kswQVIAj#evc79m-=j;YQp*7KF#a( z1ROMt`ZC#q^ST_}d88G*JawUR>>1)s=X+n$o`QS6w#-}b`}JqdB|EX-mdm7f{lqGe8ytr~P=Y%X74H@MiP@yF2nnCG8r=&2gDc?X8-_d3eOpJkFXv)ja-i%k6^xr| z?jINZaiz%GhcC(i1p`|4}Uv@I=yfGS8L4K!7X0R z`{9Df*Z$Vu&m@I>>>0(j)0>eu*!lTJh8E_DJ-+_182zof=Wb)R3G^HFQzX?2oa?r3 zi+9HN^3T2J(NBw=5@S!Dq!HCaa~q1FXKt7)8%;*Q=esqR$r%IRPg8KM6#D(evNK&e z*AV|z>6O`m4+bpO_kwSLe>Y__=oo|r-jZYANmC@F60ewiw76? z=hW+O0ME0!jXRpb#Z*njqYk+4uYt~jv*4md+*s+O6y!Y&2Ly~UF5H(MmwJAdM*c*a zF*gR%h_n7-OID00?)SG(u{gnxFjHI4YL5BP8`Nf5cj3O-svcqA2L5tv@L8yY^EF@> zUL=k4)Vy!C1moG7t5!YcOTbr#tmba`xr4reCMobcLI$i1tp-p(EhAJa)`~hP%kWcU z7$^7aE?oXOAM<$5@5>*F#yUQ8+06w<5I5|qi1R`{bx6CmatJ!C}WT1hlwT=)CzJA?d&XQ@tZ$482+ zdp$#Jq^6Kgr@p;fD=4Qo=qolBYkal@g4&bHpft4gL1kg0KB+qT$!|y))KKKwegS z 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

-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 F_%D?1O2YsE diff --git a/gold/min/sphere200/base/quad4newton_tex8_grey_cubic_bspline_lut_lerp/cam0_frame0_field0.fimg b/gold/min/sphere200/base/quad4newton_tex8_grey_cubic_bspline_lut_lerp/cam0_frame0_field0.fimg index a6a3a49436bb66ff13fe0919ed3b362bd91c51cb..ca10488baeba7515825cb0d50a15e32967f15875 100644 GIT binary patch literal 128015 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 literal 128015 zcmeEv`8U>I|E^RBsZbP2(nK<39xwAe-{$ci-4m%KQ$i|DDrrVigd|ErlTw;cRE88v z5zUk$bvdYX=6 zzvs1Xzx|OVJaS$(&lCcET7!YTI(XC2S@!L=2hy}F=p5Hjl(ufj?Xn3)jdAYxwYLIs z-+#V?#-I=4I`gu|%b7@Oo&L6hO~Xk18rd%)RODt4O<_rKkRTMcExCXSMT$s?>{&as zo38Q>OacB&zplw`Pg-Eo0{;gVaOi8hyt#{lX`fo^Qo=n@xG(C?mwabP2Yz(^bT$BQ z%IVt}U14aKx;8E8A`f}r%#R;k#el@vg}|h0ZyYWk_7JcSz(caei;nkJTWGhNSU5Nu#QMFGh7gDSeT(h| zAT#fEtg4(ptc*>vpLhnrO`u<8Fdz`p4tk9iK_1wp+{V?Z4M7QCc!7g19k(cVc8{M7 zMycYC;J(ffeC8R?dV3=j9^c*Gw?1~q_{<3PP6-pVm83+^iliXC<;8+TQ+@m&m}c@% zCM_^&f&VZIH2qkyU0mA-UOp;+D~4H!9;>n6@HYSwK4&Lt6GL(1vHE=~D-?ouh0jV( z2O`TQ;9%O2Hz+GxU%j2}iLM*1wx7O)z^UX=vqU)qE?-Zbic}9n-WmUf-3m-d$ZpA! zkYeDC!6UgnGufDPEx}88BM)|^e&*_FY`hvfP|_?NfV@k!GC{6puzkKD(L~%FLaeGC zP2s^1C~HnniQ>Y0uC&9WDjs&+$Xp5Uv7aXKaNP`2uollTX$XjW_LU|bM(sh zZ#+0?^{y3+VuS}TjWSW`4i2 zd80(bp2+=XT1^xr?3VPY^>=|r^5OWGW$xIsZ~h*-u^S9KZI)hBbp&Oq$gcpV6NXep zB(vU9@POidY`t6vl!Ar!+4<10I{rXz-*+nPRI3l_Cs1(Fa^F6w8I~{>*!eU=!W%;; zFYIdGOGA5jK+3yoG#K?iJf>6R2ko>cIg)M`IM^VU;m1Ch5*F|jq@z@#W4S0L1gf0bmbO8mcq#NGb|obc^ESk5pfwnlbvH{Nt_#91 zg{2FzBnY9!)nm&AETBYBTCi%a1-3~Z-ktQ?4*%uHXmb0L7WlWaK&O$$o>@zLAn;RD z>Zz6^mgJSzhQFdg{EpOH#d!f(;I~5Jz+qoZpAohFmx?hC8UH$r?}4xh6Z|fAiw^yh zZULR^-Enl^4mcXj z1EZqkRt2eVO4~izz5bN}{;dwhY{q2|Sc%XB?)i}xa=Y9Is=%-4)r*L+ZV zYU;*SCxdX&LEgXIpN?1Ff|2(-Xt-@D`fy>816FU}x72F}3+67Dn;k5|@$!wrk{a(Y zj1{ZxyVmQA60`2zYZG0eH?4B#ug_j!6b!GQ^(PeGMGHS{6eE7->~#6D!ayWFE4nrJ zxj!Oq&1Y&{pkn`@LoE|W*m&r6=6w{03q$oirvtrdsJgsiqm-*BRE|}K&kPEN1oJ|{ zO+^lByX8#Xgv0UcYG9+5ItzP$cpSN?;RwesTfXU>HHW}12e!OiZ&P_|r5vBd&Lh-X@_zyi^liQlKz(2|YBOf$o zlnUq~!7X>SIfDa_O-l_GKGER)dv0C3Nf;zHp0ezpr?`eJBq7WFm z#7mp9LvU^<^TF!&02uCC8!d9i3#qRr9*rJ$C3)_Oef(%I`0PuMZ(!0;@7Y-Xasw5+ z!hY1J9Q6e2n#D7uTGY5(#E{xBVUYPS4(5MsRM%w*kk zgHT(-$on6zs8-4ib=78pd01>vZHy1ci5V2pVLqA+*DYAn5r*7bZRfr`rGuLssN9&u zKtu5%rSutrFsfLc>ha16-DOh_#>oc4jQ3~w{Vo=SH$Lj!H*ydU*BnjzO60GE)-fo`t$O_q&HNYw2<)s{=*N(Ls#}?MmpnR;^^iVbAplOVYVYM zmx=vtIRSBe4np4ixx(MU#+MY0>aEWhuzG6uCv+ebN=BRS#jRzc^PSb!+ z2|f}XWFt*y^Rd06R$tzW3!Q+tnM>2dpgqqo;BXin6{8161-AwwW$NcgONHH0bBiMP z&fOZ$^`9zl?yX^o_T(@=J0^K3v$nY`gFl3-C2E z;@?GU;p?7x+jL@`5K5a~v-3O)HkAGaz8_gQTg;Ac)C@#mMfg;?ANHu+R(W-!i#swa z4?N9w^MzAkIcwysH{wn_%Q5*JiWEs_{|`bOM0%AsEtKYA*yE2-wi_Q@Mk(u{CJzr| z1N!9GvT;_H6+B0mjX{}>&vnFkNR?2j^!mhv_5)?#QJ)}W-TicY2G<_{=ErYx`I8p- z|6&1}@|sHzNFLZVf4%hZB44D>I#c_&*%y7bI#V=`x zy_Qb}gk2XL;q$O(y;7(5elDV}9bdAwh>lF53G2}k1_Wf21q|tIOlVW$=Be>8s(p`k zL4u8CL6z&1v_dg-#Xs(^TObOa{W4PTphC5NYSE(zIz$v6Yfoy+hPxX z!FaOQ4;}a%s(P$;*%xzLlVyjWvhd-)Gt23H9Z!nn(+LZ}%SIll<8wK~O7N zor;=*sFdr{C_z_lmB$m0{)IaLH&!yp|nYpL5UO2|ZhBWu3auD6~{7BMX+jk57tuP^!ANH>Q)Zwj(wS(a6Jq)%CsNL z6I}2zwsim7Pd4}{Grdl}h=Mz%t$l~?xuD#+KXP5QEwpom7cR>2f_%|~g|vMP^fcL; zi?8M4?N^!)ErE-H=h25g>`aTAq7#Of#eu7TH-zE2j7hP^GZnl;8!^;wmlmyztDN#gUvJjKq^Za~qskaPvLzMe05qqU%5LsM#F&UZaK{QeYti za(&4bB(LTrf2!BfL+Op3H`kpp#6iY#6LEb9JapY*s~S!4G6AU?zq_b-U$nn(Q!fo! zAE-a74pEW+$-7p^hYE$ey;R1UP^cuyrNvz)?}rVdZ+*PnAaKC%OkA5AqByLo2j`t} zr`z&zZj2+u5^C1oa&$$H)!sm*vo7#aVjasZcfh~NahzP{qy_%3THtY^SOWWwH8x*4 zSz<%{Ra3Ruy#9qWNX8f{*7VT8=vQs={v3j=QCiEEjW%cr^y>W-9)xR-uNq962u?Wd zIoGb=9Z3#-g2I1IVcXww+J$9{Dx3X(N0|XAF|KId*{CnUpyf_QTw->Py7Q< z|K!;2V6+AX9R3|-jgrtC(!Z36e|+%lG{u02!bg9iR8Mmtud63&+scKJ!ZP7DNgmp> z^P>wlFmU|n`z3if!I*I`o8|P|7XtQ+<)r0(k($y|5?D|2N$!AzjE_HzHbjq}Jx7Q1 zpWAKB9un7mZ>)7X#mDObx4CHV(acC4uKg~2NUorh^2C>yC(;oa~;Z@6f-NvIo| zzkk-8an%S;3ymJHF1CcwA+uvk76(Jv#r(G6b`BPFCx|DL{)ur}2yN4#Kl~RRA>9fK z7$$oq`tC4+a?HY6zx{v>HqS+8&!iwnZ(x>W6CHzHn$kk%Vc7P)QPQWAJV#8<$LN;iGl6N9}2M z9*(ZQy!-Aj2d!_zTTd%+L3x?B?$jwiY!kS<*LF?_KKfN(_68mHo0Xlq{Cu$UbZ6Gy z4^H^MdblPZK52n}s0Ettn)(;^`@&c>bF8hDg6Jq||AxKJka_(3X!o5!q{;Z}?veI~ zbGZpe;XMUzb0f~Wbs1yn7JHSv8NqN`cWU}E77w{yt^?f@p@^&A{UAr!gWy;m#3wxs zMW3(SxqSrha`aKqiHkH2_M|%$2ruQK?rGjPqjGO-zj8wG*B@J~KWEe*%Qj1s}z4U8cz%;9=gBdQB@99irJDc7s`@AH7BGX`OKhR;(#^^6aHy zPLjs-F4 zNelc-EwDPYZ;`?Ze@M-dZ7}#13b#}B{bB>&C_FFpt#Wi zURif!@hl5OizEpeDl!nYbxp8gY#0jt!U^1*(}uE7Q0&f9}hmG!9jSj+=traI*a`=9P#AGlLjmN`oeLW zI-7|bBRRi&W`?7sNLp_37Y6FZhSCD)HhA&V}s?`tYTh6W1G+zm#aZ)c5TyC-th0zQN(Il!K3b>Ne+4L&ECee?QakGxe| zZkDH0kV4ab5%q&>Qa)-B1>ai6>^kIUm?KXU~qlaoG?5 z(!)0Sut^L2LoA@ATDhX8TMzlm9fXs1a9)CU_I-|G519r(g*FA zWH~cY)=1T@E(6y8$mvm>Vva=@&8C@=KH};meWt8|1&#?E+2-KOKty7tZ%S$iY+uCq zwMPR79{t|GYK}dg-(DmCOrC|exvy?!sM8Vh@~nf$QfDaYKd|rq&H`t(%0SvoK2ZMf zlSp+aj;pm_JWu+`3bF;BzGWP!^Fjrt>rxT5B4+d6Ee@DhpLt6np4?;KV{N-xE=Uj0 z@~|8OUVOh`pcih2c{;%tJao-rG~@V-xx&UM9N`)i1sR~>$KACnvIFrV#O>psAUH7@eLo6xc|$W>{I?5 z?VP%a1?D{&qhN{+PWL%(ynl++2WCHw39{v)=2YQ9ky-{8{CGWM(PmGad0Tghzt$5k zP7g+n91p2!?I-3NaZPk0Y}bVru;aN+Gt9!?i;l`|rJ%EI5P&T*E~;P#+n&m9tPapy&wt?da# z=BbubAsQUSyr!MFu*V-t(T|+|oOXx5-XGx!nNZAoE-LZ2j@11h_1ym|$%a^W=mm}a z9-uE5-P)-h1cN#ko9Pow4^g}&)N?I};1QGZvaVdFAtAdwH8q8XYm|1K z!>TMiJD_tkaw;2vMY@YRFELTuyj{(73He>#*F-Rl1sM^aD;E9!*zwk>ztGMFXS5_pAUy<+J6vz6jCvsCWAV~EOAdTniI?>iEV6svm+Vkx>R{d7Rh$YLo#i-tss;p78RC^XlsAO~c|F#97Hp$aCBaOtzQ+`N%?e)QK70KMybi#+8 z{7hQl-`E2B0!CenUy(R(Z+*ymH81F%SyiC!Kt~JZ=!cqjMi8yj9KMvoz{@2To^uHP zL*wRmRVDv$^#A#BD4XEUzWq#isXD-+fE7MN)*GcvYqef;l16 zH;p=C-aYo6t6wRIl1SG~Sz-qTcIHMcwiWEUa!!~Lob-YZM&0x?OgI=(XJ%HC`k2bC zJDTRf@OgdE(6}lPjavu%6TeYGNs}tMZo)Xs$5^7}ZiwSKf^+%) z%LXP_ZBX-a$)CD8q(79lZIhA#AKP^2S8=xyd{5tlyARq!P(?fIE|qVA_pz4}4jNlx z&%)QKo_mAPX_gTEWnCy5_KzBE?)AoH&7+5Q>bXP2PW8a=#YCS5&7U@3V8W5hyL!Ei zgQ_9lm=oa)qKA|E+Gha;4P4XRl-p)#eHDL^-s^9K6$4$`i}}l)F!-gLt!Bx=K?5Py&g)bxlb7$``<39rpK!<5R+6}O-|VzY zd3+=bi3uDPW}$4)sYSkbJYhF|!=+teT+E}rQ#wj`eo2dN8=KFW)H(b&b^-sDOK;;f zPu+Yn023ReJAFgkvB0aq{a9EiTBBj~j^v{ix{5zcchN9deLGr-TlH^vhTwb2 z9#?PS00h4eopt>LAYJfn&HF-AY^({?-$eQrZL9VTtrKJ-(A9GN4!2M!t`U?M-s^(F zJ^h>Ih`-yVC4T>atv{w1zfs7K=3w~y-eqFs9^Sqze#c|j4^9vLorRe0SYPt@KrG{LD0 z=s0%wM6kj-79yYB*mdC)4{lC#Hx!Svky9P7Jh-OcYkt$u6-=CrIP=(%=yIjq>~FernT2Uu!I4G*OpGi3 z(pp2_8+86B*8`b>xU;5>YqQ7=p-uP zC8oKA(Su<3b=QsN6mQ(%GVp$t8$>>}v`@7qdH<+`|G5=(tUtOxL%qleH;*f7Y7u?I z|H?}>x#@qr1;&5#qTgyb;nJx&Mxt^7NNH+5Kj#wB0loL7?r|jHmyP6Fc!cw?UBE{+ zxiSPb(@(yvo2QEvRT5o{L{sExsd$*VJHhEGN66OD3!$+N8l0bcknDI+fQ!d)~NG5h^h9N%lr8Un!6vKa6OsQB>2YlGq z{HKhM+cMpiMtWg*v9xNJtvF0FSyOIsFd~0%k?JKLTJF^;jrs7gs&Tc7MkohblArsO&iP}@dOO)qHfESz zI%2|_LB&hPzH=7{U(NI8YLO$P&d)91J<2i;K+Ttd+mEuGa5b$>Wml#nln+_ku2Z*0 z`_|>>9};}DliR9|MlxJ9kM%r?P7a6Iq1-by2{iEQcn{Z-I;w85Q=sE*Yb;WBr-jt` zU_5u?>`D<=jGI`6?9KLu%E})78w3~Q8>C^dpp}oh`uH%DMN}x?dt<-iT`=hRhc{l7 zBKs(Lx@IGZBd6(0J<2eqqE94?W8P{GUNmRW=b;xe@7!T7>*M48PyG)k2_9&|DmHe} z77n_mS=$_of6|O_&B`%j3<69+T(qiiMUU$NyDtUT(rJXs!886P;a(jf0f?M_L|J>!^{_y6l z#sfSUoqPD_u982DZS0@D{;iEW108dx{B#4Qc&iM*oeRs1ZBM>k3PYOoaUI%X7jSZw z_je!G#~a_w%rmO~kWgdqwB1Yv{al4@^F2rO9eMWqt_R`&h8bygoZ};SK~l3(7ad*H zoA(b!yW_LF{0hhPVBBBglHkkWBFuNH)@?cy`7>v!`nUoX(n-lLmpGvG`T|R zYI;`GxuQKZ^a6jY7N8lg7?Mx;W+zqV%EhrUY;aj4Cx+BF#edAdG;RjU(Z)9syKSH_ zG4$u{r66QKWREHnU99?n<+aBJ&Czo1)?q0g4PRR$+bqXOe>=Th?*Y+YwORD?!pkXo zaC`Au@;t%Cw9|ujjRkYTTa=TzCM^Ub_WO$>b1X3>V3pGd!7aY&bFF=3#U}hfTBx-a zA3}YVz0p_5_weed-t`$)P}ys^!=Cg08w5A$z>mO)SV8m0sRAv%J0Fx_*qbvyjg5R+EyTw*)v2md?V%s+OQQ-23G&ASqSzP<@pdjTfwr})-fT10{G z*`8hI!-OaBec)t+5uKNAP;P3mXp6c@UZ&sn_y?gI&(&*nCnK`hL4E;%5{O zE1qP&Nht8er8iAGC9ZQ38~n9(#eOqFF27II0VMzB>S+J|c z4^OAqno=u$vAIT!Ip<~=l?59ezbzCmrcOVx;xz%y7-NIOt((5Hya8ewcrSi|W0G2J>%GapF*Z z!K++5%-S|nXvR205%u*mY5R;=RjB?Fvqna9?s2vFAnX$ODdqQ= z;AZv=@{dcHqx<>A&!wbadpIC$VM{m{f75@rdd+ahJ;UgkHB?i)h+T4$mCZy%l=zqN zlu#_$Jly3cKIJ{KJ9m=+A-hvqd)2OV!Wj=%_oHRaLKqnA6$y!S# zQ<-@1K7mp2Eet7Y$yc}LF;F9wrPO|s=!$*P+p4vJhItvmr#q{-cyKJrOZq7jaYA|w zJ%XP}DU{U`Hz0Zc`;rqyi(DrC;6K(w{AVs~D7LHA(3a@NXWrje@hAw|C#DOAF7m?) zPo>#9RPrAGw0YU`>3&d1R#=lAfc?ckO*46zw{3c z2HN^7>`mSAGt^6b#ZnJQKi>0Z%5*N|7kFMxZnXw~jp<3PaBnDko}XqZ#E1A#3Dq`f zK72ZAV;`9E(bvDFEwPpdy%foDoyJgX>6I59I$;Z~ix2IhYC};n?_ADt!sFl$=|>NY z^YG?82EPr4p=-axsV{_grk}e(*L9`?&R@AXd?Lyn3CF8eTijqnXoXC`VHGy^k5;AK z@e4z9$qtJXVLV8CZ&J5O2uH)~lbi2EGw{*=&8nzy;A8!0RxO3ZV-4CQ3l7Jq-M2p! zf;Ti7ae3CX&H`^8Ds7nJuGr|CA5dcxh-cEBDV1bj7h3Y~7!DHub0onlLYLr_ox49w z*o0%3&PH8tQ69bsoQVENaD=hF$R z{){&HKT@kSPwb&EaIjwO5#4|N3r9}c<&_8uPeWufIw|HZUg3TltV zn;a%MhAoP&%3I(xP=2j490mzcDx7HiYwb{ddhDm@UmB9zX1&oCW#Y_N)jgZ9I-sJu|Jim~ zIu`S}x~nXhU@lU)L+JypL_7K}q6Ui`RfR*E+sZQ_>r7dMCyi|9{s?U>K zYeDdG^=0q#9j(!FDd^o)!b|mPY;AnLBN#SxscnY{Uhm<@ZPprucUyVtaBdB`w~oDu z@>aHikfcP$jnh3~Ugy@YpU6bpl&?v}U+8dM(Uf&~qX{17yg5AP=z-BOq0*Z|JSZG7 zctzDy&y5H8Vxdf@;O6AoBrY}(R=)xi4vJ~vW7MKGFQ40C zXf)2;I3yTXl(j26v^>zaFCs><)C!_sZ>BCtcR+?`bcC&s86x&KelY%EP4J2h-r6!@ zcp7!cEd5ysI{Z`wVr>Fo7a`bVcPrd4ML*~U;_smI zURItXvb>$jS5Y{SPN;VLwIl@AdMmR-*O|l3qNi|7ii)op)`{*WwrEnHp7@*i*+Z9n z>DxW15S>!*X`|zTucw%=E2jG6!}5YZLVtqs<6dLSX)g*s%cz?~_gdkfcVi}3^q*vb z&ByTY?@EH_`}7aieMa~H?wia$Q$*R$fbxzfUaV(2sPQ~lH0!1ZxS_{nOq;nVKH;)+g5<^CZ|Wa; z-Zp^nnHfLxKL%p-<#vbPwHzGTruW76feWmQ?yxr|>tf~oz8kupba>y_RY@UyR`%uo z#r{$RKVzSry@jTQ$m4VVnh?Dg5s4iC`CF){+SQev?rwmSohdWbRqgQh@>LhxU>1G} zHQ&-srXt7K?p|aq;j=8gt~n!>2A{G1nD+w|=qFUAg=^ZtW+<)ITO{oZSuPi_;L1fl#@^(oNWKcg!}1xP`x6;h(LStsZ8Z;P4hdYTS;$4<#>!yl z^S)ru=csq{?LdhMq6!H=82 zUBj*Q2%d(P-a`0^()w{U$Z;U)dbGy%BhmHRX)UTDNN`D-GX50~;VzCtodJx z2#-{7z|LPh41#C$_$drG2x_}GH7WBDIImdAW0;DwS~oOxk~k0uo_XTBA`Oc-{C1(K zn}9K|QMqdY(JATR=+-Ln(Ga0NrNr0^)0e-uPn~6sh%L*6)kxl1@Qd-llJq;L$DiO! z5WJuFw(E1g%30#e+ku^0&7>dv>xXJjFBkU?i4qIB983?-llVMBt9k-l!%Sk-|Dpp2gL%QCOT&}KHDai*d|Lv+7 zX$-{aWUL%U2*%b%rJvVlp|owE@`H3L?s2bbh7r6>n%w1|v=3oWR><(Y7!(F28(wQ$ zzBQhxtewxR^uV7}vg3ye*r=E6(k_@A4jVt}wy8unL89v8t391uJS^C7Kzud_*BjQP z4t+O=@jm`vp(HoB%uHUPQ^bM(3z>*Hcfvr6**hn))eXAW?605muDitOmjdZq5?;NhNqE@B8|JEI#svr>(qlE(`~c zOn6s&x7CAJ?h)|Madf7@A7GSzMixsN#COCzbA>C3}4)XiICkL$$ zK|*bJ`idkz4qDXev7h?FU;I|9IN{Z&@A2QBE5$|l$7oqL+Xd0*VvgId34;7_fd$5P zq0pNsIlQ#c5}oslKiyu(LD4;*&E}iEf*yqb`pM+PEpO5vzWQEk z&uc66o(rL`{%sARuSdrw>`8uF*O;V3__94~m6^xa`orZyQ|-%#K%vOxtc0gD^ebpA zi#!tykzRhJyp0WV$J^J2#e`wWw4Q6Fr2f{!zSTe_d=2rch;+5EK*&p%PZJ0X$NHjm zrv`kO$Q(L$OYRX6Q}FoBiWDbsS1b3i2`_EWfm2NnMncgPw*BSbU7GlCf6H6%Yp#%& zQqo?!$rlmUKMc3s)4}hnv!p1iT_O0P!~ND|MoZ?Z=P#8 zZGGxirZ*k4>b{Cu$7`c`=JVYb$Xwws$7_teN&Rh*@zU=Vsk2G06Fz=QQU}!ApIE8X z5KMdcPEBzG2aG#|t1m9`h2j}yY4_WKcwdmM?61Serk%^yEZE`;^}TY}_im!&^p<58 z4(f#C{=5r1`v~qN?~BrRFQP-EGRUgeAUGV_N{>gaF{LEr*dsE|Bhy=0Z)UdwPaT^GL+P|HM9<;CQ~mNbM32$bY4;eeu3?PBW5M)k9V z5nDULzZ2=|enb>(#D6BoX{{lA$+_YR2Z%0dEeYHjeRzV(MRy;^}#joP6a{o z&=TPw; zkXq}zJEJHJ9@~NzwZ^#P{D`z}em5O4KCbrhURGck-{#-7qC>@I_|}&S4oVaJ=@|rX zmz6m_Rnx>5mW!WPUA3};>Av^%G1mf7DK%@)wl&UpA2(t%+r$x1M`c56Nd2(({3-Vc z5f5YyhFQ8=+JlmQHKt$&(O(hVaQr#Z9~rZ_H}t9xXtoP{X0)F4Ev6W>{q`j~q8f>Q z`GjvD5V-Q-Ou~lEY>PN7l<03zFMt@%;oLTVcsMBwcBi8 z$^%W3cb^ygoL8ldKE7egMxrb2|8Xc-=2Rfg`GO;)yH-oe=!KtjinMI%Qv1=20Pjxv65GD5;}em%G<^+J*2yCPe$QOd<3>Wp@FK z;AmzfPBmG|fd1gYCvuyNa9Q{E73MWRuwODltSR9{kAW-dNpRfk>ehm)cQOHsIvDA^&MU6Lvud)ipMVYswazw8*$pjrj zr+Ltv?#wW63Bj_mgQI3qny?@Dcv(wu&qt4cekj|;0(X#d;}Fr+eo}YbyC9Daaf=B* z^}QT8&3~6uOZpR8O5$(q2MPZ3*p5{3Q7^P6_0K&pTOaF>jrOgZ<&3^Z%ZK&;a1&Op=fdSiBkMVM~c9Z_4*6m_`0d;ys@5G}1mnnxg0AITs#}f9?aeTFzPF-Ul?!TPw zWboDk%Gq0gULd&Tp4y&Tjf+Omx^~WO=!i8AF-&Isu<`;k`VggOZ5W~(-|Su`%g0G^ zlchUq-SI?V)R>##gp7+Te|#qK-PANiy$*LO%8s`#63f&??!3m)Id-JK-0W6pXdVvZ z7ir6{{tQD~g8YufW`2kcKAr1A;>tc{b-_&H59{51zKB00IGJBf_m<{ypw_j46=k;-OsZbOWD42DX=pb(kloDy@A$;iQ zriId6s2DhvG>UQIH|=^tQWN3x1>9X5NO*uM*H6w5J?sZsfe?;-BynDZPsxQ0M|{2G zu$)xzP&j`y*Ju|PB}Ij1!tX*6vcA{df-nrHY6h4++p&AeOAoYmxcMyzb;0{Fn`YWh zqF9)@E_|mP6$vA$85=i}_Z{cd&QCcc&X2J+d7m7JnzZO2cSs+9-sNxCKAt4{udAL- zImYvYm?GoBxRf)trv)Eew#f>?`z2b;>4ewZwl1}KBNeiB)Rp&RTqphDzsw{2cRXlL z3EktGelV;|?iIg!7l=JNkJ@!>J&>oKz97hp+$RYQq2yy^-c7OY$qtnOG)YlY)weie zbN1>Yzg9Z5^fgur68`G2x&D~(=3oRz|NIyYK;7ua^PC_2;^;rVrmZ@Mfo?lz)&G%5_U-RWXef6^iKBtQO! zGzH&-3^!)&Ao^7WM*Z2=9Js|Y>D9|Pn5KC(?f~Hhd;ffz9Zz^CuX{yQE#nD}Z+*Fn zSppv(+mCeKy30m;ve&e_y`i`-tUP;rRWO=2r=8P#%f|G_D#nM2Ug@-H9ZL&SS$N_h zG&^+~!Oz9ZZ)@4lhfa^y=40onP@(tzR;Lm^mZ3r8v^K*3RdkTOyPbvca}m<@kE~E~ zqF1c`kOx*oYkfYcN8(!T%Br8vq`vuPt=_J1H>`H`;{NU8LZc;Z$HaawBul@n?0jVd z_SG*=a|?LL5}xC>T!iSgc16Un@YWgn93}>Hx^Fftm~x`aoi*ddj7xl|$V4w%Z$#EzTsY{ojEQ3HJ;@E$9B- z;S47B^qw{Q*-vf;69AW-`n3tySvqZ*Fzp*(+I z$Aup(EU!)WsCN%Tef7834Iy+K%5~D#2n)f)oEw#@=WOAA@J?#{PQoj)Jo%{aZU7>$ zU*B|B(tpzb{dc&n|M4z4``h9kB}l<^c6WTXaTtm^8cOc(3xcO$-Kn-RHd+Pq+XFuM zAt$QmL+mFyRvk5-FDyu)~hvQA#%lVX; zU>GkhcfGrc3Hs5$!ZXR7pnBTA>B$?daZoPj7M1YA5^r5trFe&r8GOX-rC^*F zkQe%!+|#A`1t}AR#TKvrJNX$M+nxVNM0GGAE3b9ArobLGc3we)Ho8bGc-?T9Vu<5a zd8zKiKY*Xh@QF7n({S|_T&Tvl`OxGp2>elHhr@h$F$UAxL&JjupDuk(>h4^C)t!O;4ou4T(`21`iqD@)QvYc)Z;ifw!Pk}zYv5AmMxDi@Uh>9Cw2Bxtmih0!ZJbLw5IaGOy_EwyqwdziiM` zpNgH(XG7+-bnXY5JC?BHo*v(1iT8KDH_c=aUdXkPrn>W_&i3X^spbY#(5%v3ju0NI znrxERx;sR_xTC66YaJaAq;wNL=MbK~nvR=J5EF9pHZu1ly)bQdyU{t81srYnX_%W^ zU>k2ftGZSf`la))RScWq>B*PhKhUW#RG!|mZE+Z$a4s%QyXXh;uQRldyLh7bnS7cc z$q%y&^=-A1czC9YJBmcF;G*m8S~{7xTTi_op-6P42lE`J^wzPkCF#wm-&7t}$xcn3 z-w=Q=eG&`4tkT1M6KN&C12)J?HB-yDWQ(#jyPw}n3&fvyN50JE71D(f`!|o2X;-QJ3>LHd$o^K7%B%}RmJ)E;`$&IRa2ow&a47maHJfKEv2ZW_iRtZ9 z;zu$DzozSk;%2*bb?IrM&z|M$yuREK*`{-jOIq2ZcJ1p8vwN6m7=KygBTR6#H`mSX z@FspG=!CnvV>l>Zi&Ks^lKAAQjmPa{dic;I>9a8=1W(-8W^VK%`P7c4PZ4@Ve~F7EA@<0@l**1O+2sDTrdbXd~D3lJtcap!;i|ElEQF!;J42G2!gAt+ngD5#up7~ z8Q059>DbRszp)^T)Z@e=8A^n=_uNUiUxv&*&+gkb6@f(meR1-t{S9pBCtbQSSJ(n^ zD>j$!$)V$SSfMK;k<2gW(AH(;SwrETmBqV9WKK~C_h;k7k{&e zffr^El@9;r5dEu&HSW{-@C|WPwRd5nCX_Pc`g_vH?i5%i{MZsA;nL;Xd)=|0wv!_> z&mGHbqho)XhQdy<_uI*6qR(R4)$8I#>Jt|$8gCQaqi(CAeZD>)OqaYxPYh@%6CA2v z-=YnftIO-uo{~P1fL?b_xeGFtpN`wuk$G~D+LI$1hz{zs%9%c-f4jR+D{{LG6&2}f zvdV;CU4QT8P)a^I59-cAZ)8l7mPaiyZ3Ei#Py8?T-ZP%-|NZ+{WL8Kr5|Sch?|ImJ z@BOykZ?j}qk}X?`wCyArp+Q-R5|ShY_+NatdbWNvUV#%<`LVAhvO}P)|RdU{naZc8uN)iXRYHuS-Vwdprtmm*MZdqPGuectBD+zkLE0&I`RqdTD{`ZZ!RZj4T=&mRnUfe$Br8+5{TfQ zJb!~$37_xR&F_kN*nx{U#dWL0&Olc5_^YXLoV=!FD87mLmWCY<-#Lp zO<>%y#={SDiINZY_Ism$K3|2DpHt-qe>2`V)`k)xSm*@(*nkJvtj2gAkv0QgECa`W zdxE{+y^V)Hs3WW&yzJ<$2L6lQ@5gC1fgw`AUpN(g63?ajkJ}gl#k^m#yMz|JW=^j; zALa$$Z-C}?K5wwEe$(VP?g_EC=FN7YzC%{Hu|I~>8U#{0$fU!a;h}c4?2?Q-nAs3G zg5ohp`243s&ge&JH#;=j_*MZPsq%FEvBq5C=36qmHauV{UTRlVqcmg?sBh84IfFE( zW{3vC0~X%jsRlkDu+#l0!8Gav5`oX$E7p-qGrzbDQ?@X};S{{n-V^3xxM_kJ2w)@f z>_l~=7HA09T&?LP!0p$OH*NZm(-PsLE{c8UADveR-wgWz6)~(XQOFKLR=LPhzPZ7x zjjS5I%RW#WXUlM1+#W`ln@+dAFoW%yJHp3v32-{xV|8fE1opm8d(`~f0Ont@jg58@ zLD0+3>{hxjJbxP$*Loi3Ba#W{yKwG6>wcF^LI!h>vxqwaah}QC&7>0HWdm0ed$n^q zG2di7(Y5K6D}20cJFeEQ0JARnz6M+7P*%?E;{65de{ZQ~U>XtRIUX>jÐPvF;TQ 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 ZLP2h|ggE$_(uXqo!)qOp;zLgS1`h@4(MDt zx#X9FF9MehM)F(O!g~JcXQ^^4F+Jq){j^#D)Q(TyblpaRZ+}2fMHvN&tM2Uk`<8}6 z%}I~Wkw8q|zr0$&+z3aDMZ>QcYN4X4g;v+*0jq6?+|Pl6Bz2*?y1Eps+LP^S6CI3S zx<~g^wD>~qk!dI0lYz%ConABjsn}vMns4ME3QbZ>!S!4gDk2vO*!fc7yz+oX?`C_j z)^s@;o&^3wKdzbAo{7Lr1pXTls90|ExBajW3dp;AkA8GRseuS5-q;BhQ)7lFbArI^ z+0J+N2@`FfC$b_txHwx8AZwNwhBN2v?*#ezV3|rrb@9C*6j~<4H|tYS@mBrKSThA@ zHdOO&d<{T@v`qY$*`Da!(zpHdpg+U~?;Y2@@2D1uf0Fy!kaG zj0HCjXE^#If%Rp`;Fmj$7s17T`YLa(v zp6dyf!u(l9z3%Y&Ce4+!w!pvH$362pGZFZYj)4BU#~1xvgdyy?NBEhZ2NdWpx{4~e zIPzedM^i5yH;y~{YL<{uDJuQbCdCp-Cv?30DyT?)m)NtXk%Kt9V^PHxEEM=23!bk} zh52t$0i{MSBwqY5O?u~qk>!o{3kE#EzG6dGD0ambsZc{DPkXF7Q!XpM(Gh!21n!tu z=8b*pKF6ffLvZM7W{-p;75uHcx%Ey|sHMCQ8=myS@dG_8K1Z8_xw*%G8HcDxy@!6S zZ=fRSue+{SCl&DrGuF?|3qahR2L*l=>k$?DcY}CFD26O7I)`<6NHb5S^+@tiQ^N?j z>CMLdIKFoMJ}NS5zx95e7lNTqOWB`9eVP#YI%~3+1oaDU!mDW^V3%C;;Cn(sg2lw5 zaqVE-TwX%nR&9c!#{PG5?*OiBCHZ5w1OB5I(ag)wMBx8e1j4!k=)WiYpt7#DG-QoE z!k+f(9DPDXw!HQ&$CW`aR}dywU-L)u8BhKWIYYD>ua@@_3x=WV-;ZC2Ix62Q;Y8OO zcZj;Im!Ut_#E#EVyR3@bAeLb1vt2kG{oL>iDJOXF^*VW}aXTC0N3O{lYEUp$s3~@k zYJ**B^UDsbHO93M!`7!GDX{o0t6go+#VR4C>!D)dD2k1L>Ok^ANHv=6pq2_(_#yfL-Fgux$C>~LecL_m$uBKz&_$wR-UQ}+)a2! zG&2&&PaHDtsdFLRxF~;n5fwvLY^C~COBf4pxs%uLkCeDgk_sIRn40OD)R)ol;Dc~v zPOLxTViX5-NKP=ln|3nva{v}q9UGjwLc`z@!Hq)l3<&*b{rL7I6U)P|c3w5%A}iCQ zw(mX($$rX0WzUW9e{5OIJnl>c{w*WWg94rDrC#vYKI_oDnSuwu)SL`t{J(4M#I1Kqx?rcs9E(RbJ}@GupIFjQK^kYf+mFFeh|c(SMLX+F8$+V z=iyMWZZZ7$dze_=9@Fo;hy&r658Bc@sYqCPr{o8}C%SgH#y-7FM&7l)Ux{@rtPk3G zl)sJ#zF8kNzW!#Q=n%jCl^1r%sAmLQIhmvTqr!;w93SZ3_S|@qz(E*|TVicEY~;3V zJMpKLgz{bQIv7MA<1dl^<`7B+?W*WOP8}1v0Ru-={ezHw>-s#E4o3)oR-hQ@kYODB z>3Uxw8~R0S{a)CzP#ADbw&NrPC5!Q8dm0TQ9obWhPO#CrHLHEJGz^9hg{dFAOL85}SS{kg{&LMeZxW=VYzozT8A!QxI3tRmjY#!{A!`;=QM%2Vwn5n!BDW-rly(Es zA0>8*ZqY;hht%yKX{HctZmMuS9Rx<{kEWN?p(u>$Xx>xnj|YJj8h6hJW7(VdEo#MK zSZH*%%_e|~CjB7R=nr@NFIz4%k24d2|I-n8CBAp=qXYIZt73u4rNcs=zli)| z)cP#GpM>l-@!zbZ5F`s)>DBAlBeyEpHM-OYh zPbV5@tVgeVT2;=uQ1GozKb}?Lk6=oGJUz@2GRtqi>v7J1f1zC`E5)v06)3NAO-kOmH3IY#*3R$nn!2Q^58{9W@kh+2L{roE~zWdyZyV1=> zY~Y21yTv((s%+gbTaJmox@Sy*bQ)9?cJQmYk`OVtQn91W4dvILg_g@&q2o1q<(Cx} zs0sP7H%HkW zN7~%OuYVecBiTe_YWMPRl>Yp?!@-?|OQVW=4jr_`a;sX?PuJYBN2zAT7b}011ZON* zndA#PGksf!eJG^ftSgXv#X{Bfh;+Hr9C)AnC4Fj)IRCP?zwCR!fvY>oF1MPAGv%iX z6Kk13PGtSL%N!gPzNd86mw`8zzJ0P-OvXJqr_moxj`%;l_+}n{CIbJW2oMF9T9TY2 z4#n?ftvKO_z?xh97w-E(!mDNH8v>8zpI>_S_p&hfCk|CcO%r{5d5`sdM?#^Nr6BlT zj*CPMqw_*k4k&9+eDG+ZAwA%pROxUSHvJh-+WeG>-s2Su5ZL!z{&T*NlfKI2FxdO-Ooys%^CBzz$3FC~F$a z2AhMtrnYYbdp+VdOIt1(wZgJ#YlpmVPOx0)xBB#HFBB(m)-1XZ0>3}`;%PUTP=0mv zZo>)=wkV}5h>LJRKDp$HO(X}i-0jxIv@Bc{{i?{qR9a_khpS%p+A{4Uxk$_PWX{%e}c3Kk5v1=nBbqXTbf z(&UN@wk@Aygtm zk^Jk0*SQG?v!k3*O&0pvu-_VY4p(L6p7utjMqT#UP#BKsiWE+3a&Z5Kpsu<)k+(*4 z1F1`hdgzd(dkupIr^7M<)8iz#YI^N&I2Ztbe(t>mm;4b?fAHG**LEl!-+OWn&jNdGt*E-CG;#riNpe*Xfj>{~Tfz-R^vX5s+t-KU zR!pXex*`S4>zXfyC?wDYDpWo1yAa$%(HNUMu1HX;W^{gWM7)qq;aoj?xZq-(*iUB| zsvmOFb9I5{@Fu~dy3Y7Nu^49_awY=*`{!NZCS+G!ClbVlu#cqYMu`FP4J7Y#CQ6g7RSGqHq4 zozTK>C#i5Xt>P?O$c1CA|It4oY=qUH-=uef1B03xo9A^LOsE}cF=U2ekJGiEVq3_V zdu*F@#d&`Sd~Q-09PvZyZuYQ8u0NI>w_cQ99Dwx2gGe5t!Tiw(P3ag1=MMypXNK`$ zB@$#L)5E~Vd8JBI)qc>@3O2l5=7HYF0}qUgd|-2WN6_VOE|`7g*Y4k9`cT&mP2cBc zfeL=v!yjgoky?GnUfZ7yjknG9MPn=orIBk{D+3{VOvB0iu_n1%g0hSrac{Y zwvVu(Ho^Zwl;D4BE^SH>5v9O6DC%kV5u$#6;8t%u<%>{MCOcU6+a+h*v#ViRze4HdUwWHo3}TV#SUAw z1scFKfF@D7l?>Y_>7~sEiTRHd{bTl_}o-e5V4Wb_#ZSZK^sCza@kR8D;L_{bRHTh+XuMHiKx9?! z{r3cKujbRYxEC2be9&l?T1@0&%f*%on)8BCW@X#<_>CH0+e}S#iCU31&mDgkmrqiTQ1gftM*TRo~v_PvGArhUb0{zvbdl zOUDZjQ!ZwGQvUgD6Ag##Qq(p%kg;2E&atLxG8}(o#^v`=@qWdal;>3jXp4-k&nzQw z@$$7%N>xm3nm5ZJUVw{FDV2J8sw5P|#i?7a3d4$r%BB+SEZlB*ZTrN8gTQf%JBd@l z*c&{SvdEQzxHX1Fr$dQ;MBT6I`94(KIAm0C>D5d<_`hI5Omcq9=zn`R=br55Kb3R1pJReo~JVNbDHyeC? zZ-s_tp?!1TQ1SepUf$wlE`E~B{ikID5j_4v^##KMH+OWYbl#$aEq6)melZX7Ufq{u ziRUlbyWs7`=T?|gKX;zp8wcz$N|wAK5r)Ud*}4meJQp|4QC93{f^=e*PUHJfsMfPA zUp^sYm-wfRMK3&HO**|ZInNGD4J4??%d9Yb`}XYHbUVZxS#e(LmM7Mcr#&?7!ti5( z_7e6v4raSY8+A!?AshbZz%y|wIwc(Hy>v8jB68kjUXCSFJ{??95aEdF6`u_EQM|xh zI3`}U!3S5QCil3VVKx+6yg`FkNyn6KYYQ>TyQ1={|h4Em2B z^|-4{W#ByPb6IW{4bKPms`!;SKtX?FNB_of-1tkfY0l$fAYUZ4ZaoFBWrMu@2|U@_ zV$L~o02|5-+L~&eP`JjJ%f;2&p;K_Hrb@IoF6cZsXt3WI_2=Wn+}up@uxH*uuQnst z+L}h@{WS&Y$rO02^fBO3O>H9j{cYwyJTC1Z;p38o!S(t)+<7~-r)W_G{5Fm**746Z~YgpdG9gyLph*S{`Q|6@~_q+x{VSb6k=881b&b z3g*0L$JVZ*K{D0j$SyGs_y=X*%+{hqvMclTHCs>oe%5(Bc7-RT>tnkk89~_pX>Iru zTcW-ew)~vds0s4c_TH5*bx|=McH8NE2v!xQ37T%>qMxtm3;6r5bV|HdX?KfF1X6*rOL zj`XeZ!O_Hd)^~N;=7(?T1kYoRKo^e+$qOOZU5UDhyYSYd)C)u(F#5}QXDJIM)(^E} zw)i7T(x7_G#2q5XSsRvp3&Am)IOYA;Y>ZPStM@%%LXullH&k=iJ;!>e z?hpg^)3ZrFH(6M#xGSJ$fQ!epY3*xjY%m=Dyg|N{oelrw;NK6@($`;li&ftu(0nyLp?;=al`k{^S}M_gSpt4=uBeH=suhBNz!IFf#7qSKWf9nN z$fA6y9t9nek8c)z^Tynus%l$%8df~>(%BNDhmnDAdv9$GgAe=cOTRu2o)v$Rv>fAM zAY@5rc?$;%%h_amg5UANJu`QyISa3M+%cH?L)0nPG|a+@e0hFN+bfYFE+QM!gjjRJ zv2vZ|_dqv4gy$!zTbdI5xsz_LTiz46g51Nn567(FmY|@{6fwkL^dChtLjRF2_F-32 zhc}GZ)EyEhaFhF|=bq1j^M{Q-gt0QiO9FEK^4n$KXY-W`jO$YSuE7(-U$>tYLCYJuEBE~9@7J>@hT}jP0YK?>?jIy{s>8$+Z+UZFWOTfq>?pyMb_Sw%a^=76Zmh7d+SB%|=|*p<|6# z!!XsJN{wFZg)cU%Q(A_MfDrdw_NYB#ugD18N^?N&ak_H9z6B1AzIpaFlY!hbKc5?J zBEGMjmqv=sam0-_5aN}We>Dhl zg5hhnK6Qty>bX}+wiIaCsXApU5xR_$!NszK9*n#C(!wB}5Nrx_R=LOwf$Jcx<;Z9t zepJ2PmX>LZomxero)ZQzq5Zb^ul7OP(SebJ&*`Wht1!PpreLnwhRZVFo$=1_;P+`) z3pAW@`dNR9s3Xq(+J1Qj;RA5u-eoCMHoVG$^=?Q9fd9l7N?f2jo{rp2Q!KN^6H@h; ztF;uk7C&EVzlH^m&z^^`QHVbO!@m5MF(>HCOj_vZ8R2>C>FD*&R!DCa>Wmb22T67D zX!>y{q{pxDq7XXUGY@Znv}`p7TcTp|g;+OiZ1`%y^q^v7-HrXOQ*`{0_BPX4N`pmN z%ENsv3{cu{7>Y-5(Lm;_YMUhbnc_Lmso9>8uhC!bC*p){awVkpPoY?T?MI}iA01a$ z@6lg-zy;M$%@+5<3!z6gN*9LHp;-BMsX_@COUOs9jwgh}E~jiP`bkcSOi1%~3t>fN@{{(WxFY>@21Dmd$sB zgXfRUM-~uyX_xnx^i52dZ-^7W5y^m}Uxp-mN|NLu}X{w{M);{;@9{lTCMNjRuzZK-${h>+go>xUsgxj!?uyRd(So z5)v25$URZ;fzB8=)XCiqf6kP~h!Z$-Ov9)YPY|w>mtsj#gE>zjOTM9t?~Wpi?R@O zNR>r3SZczJ~Y zg73UNPm5xU!uLlQn;U{LBv(jjT);tM?wU1qsf7NG^<+a3pCF+yE`Q8PA zJfuH#7NxIXBK@Xo(v=gE%;ZGg4L>e4{;R_3cHPa7iRO^T(= z=1{EJ>nrd*jR)(>`+GWKS=hOkw6-oY5YyWfEzWs3z|b$Hvbx3|2Tk76mrPh7UoSp` zbC`nc2Yuo;{cKbnm|HI_5`h!PyOUpu5dE?p!Zkr$9aNqD>t8^%#A!j#kwulhV5mKP z@?DAWEnGqVzI4A23Y%Yiv@c^pMM-_O@m?Oz%U8bHX&Q>)bG8Y;4P|>omzq*45{RI}kvwheQ(L4BHl+cCv zsjjBGN^$T|)i~um)|=M9RZ8_hhm79tcWO-h z=ySA;zwQms%%qL2XFO3@D6JUt#uU`6&x6%<^}vcVefoVq6%fSbo(E zyiM=!2Ogtfep>%7nu`nit39%Vrf2lV|NI?2bBF&<1f*KD8q*o8p%bF_Ev}Z(WxW`? zbfJieRqbjI$2Jn{y;Q29P>TbH%f}mDS<{eTcq#fe(XUEc5W1}Xqz_(__GNA+_-i_M z#Rq$wI4D#uc&ct>5cRkk)3 zSk@V6GzH-AQ<+~k2|et!^83;S`yJ3$ntvzj85xo9i=8epd1(CmQg{Dn8ptEpZ?#`_ zLxhAjU3&!?wXHpF`h#rb{J!~Ba~%VR*@BXdw@fhBKJk-mYl}xKrD<2yY3M1~E|E9k zgf(`uVzPDX5N;pUFAiS}D4hPVDxHPc^W$0GFNpr;Iunh$S4If33SJP{VFdxF$g)k2 zWN7bpl0W&-2Weg%731b61poMaN7M)vgUx-f7k%I$;(=A<&8rlg58)GY+Nh0ffswm6 zh^fKX_UNXx;f`@R~xdZ-N z0&&MJo-*elK;Qngi&{eD?e1e~r#h%8X)elTbXXw%OFqwZPbgX#M?TVC(xEx#6u&rM zA19SL0{eISpf$NG;DVVqmip*iXcW+aZE{8ZIw2Z_7;^Ks?Bil*XLO;m7YEmGDpOt) zdgOdY3}3=_Z)_F4Gg;Lc0I5s6B% z$bY{QjD%LB(}pW4*jFXv*sID#{+%Md?-$vSa#zXwLGWpdD;+MhnGpL!_xy`aEq^HZ zj8LBL<6tnVD(XNC4Ued$j9tg=@NzJ6MYsir`WT0*d_r6Vx9X7mkURp))q1|)VwX;ioIw1b-h zJZNT?>*x@C6yM<*Gd&aZJ=%XX>6itEd*1NB`c1;lrTWunoWgMDZt}bivN0MaT+aQ8 zprhF-G&AfO8}0=ML~Yn^$a*^(?x1IYQ+C$FFIwsNL}?OJqfub?-0f2EfEVN=-woDC zGY~O)qj(q99dB8TQHPokSWg{XprXx%b?QTb550l7o?HLu8o}o&+=ErF%}iWw9Y6bF z79ADq1X9BYUyHbpr-P%^spyGlo<2bM!rt@?JZ?tli`i;!!V8Jd$4n-+#jJ^lTgd*- zAD*uG7jA)>TmJ_};PEG&kRAz7SS#Lo+f@*Z?AhaE=dAr9oR?BkXcd4L!*f<&RQE@A zj(I5WoG0{}4hfg`a}lQd$bm}qxg%m0q?o$wKH z>#5npyU#{-*!14Yd`o;5{^>(I>O=7Kezt5l&V`mwkSeE=3$A9Lq0Lt=CSv10jxf1+ zvbXD!X$u8yj}}g75qh=@mGhhrAQay&8-06U%|YGcPh3hp7gxy7A3J? z^nR)8TYk|F)7RYNj*hs2ywoi2*JBp$UfiDcx`qkM)2!`{kHcY6)mUe$%!R?qDF6 z4HxJ>C}qFQAz|d*^8lasJ}|6$+NJq=I$yv9`i27=$ zaadY51FAcwqiK$81n@uEdiEW0J|6vrtx`e-~5;b2+h!!`o~kKyA*6*`rM!%u(Z@N5p@^R@c6MA8yJ zjF6dUMDo}mdu(s96=7q^b$ch#aCaLBd8_$!@@ z-nb-qYcw&@8gZTXZoQSKA@e}yx;iU57H>H@x^RUZ_8DABtdXVRSk>+#-7q>MwlI%C7oQ3(m@-M%;$xHa+kH#f+u?%L9QRUdoT-7HH~NMeUPR<0|JHqK6BBm?Tw=xxD`L9*)-De`s==*@?VJi zpF7yDH=FP|@F@spw{!8iDKMBF8w_hd<9PB516W(yw|pXWTkZ1h(Q`g=G1B04fN_cj zN6R~@eNO{$=4#N&m8)3j?%t|>n8=^u5r*I3zYfonGAQSd*&u}eE4cYRp_5D5?OT4r z16^F7$e{pBh@Exsx^7|*`{F`+m!C284?dC!9wE1DCBe|Y*&_R4 zCl^KrKKmuEg(8LY(r9CwF4Uvu({JWE!gb>NlMGXW|8rI1(bHdC{Q5X6T6=>(ey?~C zo$=8R^W7J1DBZ<{MAvf3;Nw1sIm@!QBI@TYrN%}v*QnUvT0Za0G#kZk3F#>qM2p0)&^FwyC%=1>qKFZhfp$U30m*Ml`@UJ&_L z?bS>DIfQS|N&zuP9W$hTI9TtxKNPlMa&p>S8%(|qe6E*H#T&KEedXSvIC1S!p@^3U zR_woZWV|5&kIE9_*Ax8D8#yGMubaGpQ?#rV{WkcQY>Jti{>Mb%{6S73zbplR;ulj6 zi4y*rmGnb}4&ew)P(0WaOz1*emOMxyQQ@to=KNEZ0hM2!R|Zs!G1&Pa>t}1=BG7J)HSEO7uaKP*O+&m*fukhkiiHqMlE^4QRU5?6g;p%%} zs|hCz#kG^m96YqJch%bG|@hr!g#V1s~> z7wkK7-gFx=aC_(6&gR?J5FPQbYVKZ#&uhgv6N84xewDHMw>=5 zJb8$15!`QemWh_9d#@C|2*XHhc8b7l4lZ)Tk3jiL~Y-s zy8aKrLk~&al`G0Z!12t#x6~{#DtE|GZLcLNR34ptQbG8me%3!^Y{|fn;sc^umIe^G z_hXg%fGG|xE0!F{wMWouG3-L1DYCHiBZqYd*G8 zKzUdlvV!Pyo^3r8Y$Iif${2h79sC}cj1f(-p2fujzc7JIv>^Dh7w0bDMdYC&XUT#Xm`h<3XFYac!*&w#H80y+q(vokpR3OL9DLddhL1(iv|Yx@;i4 zC3Wpg{`-%~ME|odnq4Y$)odRLR@Z-IHSmYwX7k#%2ZU|{3#BybJxG}S$Gkp?#YW4? z!@i1rTpZuNubKa*H;lBrEI&??(el$jaY~zkELS&wzhMt#C)Qq8x8cHG;8gChkKrgW zx1H}x@I0(v8V8HM=3vg>)J<;)om}poahq{jHX_#U6WahiE1}!x@_n!a$e<2_#>RrkQ+Ue zWQm)RD(cnZbhvADNTm_y?x>FQg()f&EZ5t?jkcv@;7;C>jdBs-4=7pfLg+L$8A|VO zxoryPTVtgs30>~ySnz(K7MFjPhmqX+F%xq(noj=_kSBZ{#3dUV40o~+@%Py>KYlYL z8EpS9zuXn`wgoh0TM_s(7@P|!OneUIKP=|%iZPMXzGK9>)iGpynHb>%QO9qP^;O0Z zM%tYl7wlgL%{#?=eTn&?Xm1qYHwlBW+lA!A-Za=vXq=m~jKGnopXxflhC{vY&F%Yy zPESm-h@WXn;395=K-B z^XbTyL?12XR{5LLOx$175vQbK36T?WuPjSLk?d5KxK^10r$^EaMg;$&Bf{@X2!{+y z&!Lnrnml-u-XD=C{8GyG9~#cL4u_+}y_XaB*mzOZb~13v8T(etfA%;+f*_}HUh)9J z>%CI6UA$mD3|D(J&O)o{hTmU;d)PHt{*< zEs$84zwYunD>SRSl5UPMF|5>Bdh9w62Xd}0eYztM5gLlCj46LARYHs}S5EEj?0&YqzgfG2Q{&<5Y4R z3_EfCz~4~NRrN&+xAVqMtK4wHm-oM)zAYpAlEtMH?IfaKz-M`Rte1u|=gda=%`^kc%-sbQ1{+>7@UeJH* z4jGw3qmQC?@*qbOU%Y_e1+IM|cv6+X$1nPyNc~RaZ~Y#L?BZKQUZy%!q!IYD z0~%bU5(qwQyo1n_I(IBEEA?o$A?5`czSugo#{x$S?{B5&(9kv6_(GJx?>;yvS3DUC zN7I`urve>+94*lH587*i2V%N|Z1G_1X4k(6{o(|9!*Be~1YdSlhWRNUqR+n8*1*Dd z#2sJ1T)%qpnJr#RQI$H1IEdb>F{_#IEuG(d&#t`71Z$uBSN{4N1i_@Ex34ZI_Q&O3`uD zNkMP2*q-p~Y~EG%Q4{F`N!@Sv1QYrQsfb+!K5<*@9W|)H9QOkrH$J}XhU<&|>) zpzmbQL30K%-}jJ@f9FX%h=}id_G67dwAVXv4O3ZIQ`sJpx`l!Q&ElVyhkWq>+R`mTH8v}vgB@}3mP`}dKVgxbgA?k8of=1mKi(nEqqQa)HV0_9B6MKy;ZZ`@ z6RRqmo5+Ug%DU)>sf7PbHaWgjG!#3oQr=$<@If!$4!2cmLugf?b8@KzN;T70|Bht? z)sEFGi9DO#sB619C=8z$ZKkiP@PU7hVbS^x28b12Yi1;=53kbQ+%(B>jB2hu(oOKu z2l7e7e+l0VS+|XI{;NOOr~6~$FTz*m!L0Qz4o}1IPu?Cgm;X19fO?nKSnU2lBpCf# z>9N`hEN36H*$w`f+pnv7znh6mS0`UZ?(&CdlD|GZir`BGXP1oKq=CQLy#C_NAVl%J z?>WVQ2hP1mjw`WHY$01>)7yLdC2MQ zFb~c~wRfBdoxwMb-j!zrzqUN?gzvP11G>wU)E3_}K!+;tR^c2%7ngCOA)3(t`&&2e zeH>(sT($lyrm5!OzIV%f=g-8V&hItX7(65{b5Q?)&WcizUe)!R9x#|OfH&egJ zy__WQ*w6b@kL=DQaL{haj{7Vgy8G`R5o;oNC++TMo|6619^G)Z^*|T|$)7qVWgOs8 zl>g%`#Su9R?;da_bi51Ywe{mwLvbm5Rc%wC7e0P9Z~SaTN5mG9&x!I>EPJH$#+Mul zouj4~e+Y3Q*I7PdN8nNsyOyaxGqgv|{OgOixf1h6*n>+F*Yfa6W|K)=ogd0&R5E`r zR)c=?BV^M3A!ATG{#=~`nWGmXDRov@bp4WN?L`{yojPPHFhYYvugNJL7#@7i5>xkt;M0`1^Nu)S%KNGX zAE68Gwo5zX|B09%zlpu#TAK|>*JPt_6MXX)3H?@!-$Cf*#y$2hvW9L&sGLR=frt1s z{%AiM0QZWQ;g!Ai5Zjs2<#vP6|6G!2a&#r;+Z9GMoo5nr4f1T)O4qv09*M+m^COo%R4j}a_60?W;Z<`S8Ev1IK}~~hwdfRNBFl{J**OO3c|PEl;gA! zJA~J0W4UY?Voul3wTRck>((95KQAJ5|BWqHzsADgl(_Qv%1kHZyK5^IWf3^1`O4`x zZwVc~9anMZD50bEf2lpcjSJ;VGM5j}_DANs);Lx)@K#=X$9xqgjvH?4-KrP{p}z2v z7Q*NG%a*xEwg@qx{@%iD=o<^h&*d}O&sh+^IN;Y=AP9GcpMF;z_zF~BJ?O3-+t_>au{WSDN#{kN${q#T(X7uiN1UH zt7Ypx9%sV&B$+uu_@N~4h)BL9LdCbt9qt>K+M<|sFy`I_3#(&CSUdu+z9ez`d6JGL z%IT}ii^4o0nRhrS?LAG?ADv? zYHKvrENc70Ab8!>dA~&-F){utCUA3yEhLS%KFDXW5chq<;ZJAScr-Sm%XMhmlhjmaEgbX>h3CQ$xs`Wm-~@@D zYpUTPx2%m%;7R~G%r3CzC9lW4?pF)*cazXsVr(vy#2|P)k=+@D9(aq+f~-Cwk2dig zzV!V#4~7YI{Q3O?&{fxXYIn6BlJ8FXp1Ko;H(QPuJb%wcj5y!kAM$=+8YWqM{%L~u zZ0QAy{235ce>Zr)j|HQ6lXj_E!e7GHD^}<{lh7H)4+O;O0B6OP=_rOHUvSPsCjwvg zv`IccFOHadqNEUX@@+Vdk!yb`5V-uRltI3wKSQ9db7u37UAFiXr)5pQ7=pdA#=RFV z2SI^Pu4Vc_;7tDeM<b z=94@E5ET?CwVXll)I#n>%_jWnL@SQ+IXhEvS4rWl3Gw%zKi_R#>3-d z)@D2E$*7{PRrYHq__Vu>Ppj&2&~nvFSb@MDCp(J;q#^=w<-99qNAW;ZJj-hJd|_Ex z7cT8(3SZxrD~iM%@&{9OLu=!Bu&`3*3VU*JGWKP7ETJFSec8F_!8@XFcl-SQFa4fS zcGh39p1_0S=jTpOPf_tWMb2y2I~ux=Kxpo7qF=aMbnBr28;sUozxql>i>Qm5vTr!* zqT`RLVePXZB-bsqi#23n`NGWN&ICoO`NLT+FBxLzv#D@=2nEG~ebQuzfs%7e6!RAY?iZJk zGHpmOq`zZ2@1cVtI}uJXw1MkB<7*1D!{EA&ukY4Q2K>YBF4y1efg@%9+h|(mi0ThL z@m_|Fn{{QTPgO(U^y$Xp>PN&lkl-zKe+NU+n2|ahL-Iw*j*hAFHNogU_e58R@Nemt zEYFJ}&cO~7B`#rxE;!NgMNj*&6S~AMomwkK$27jipS?@;?+j09d7ie%yepG7OEjq1 zV!kdVh{&re`k3c+)#)hEULqObZicFT!C8Oz5Ob5hYUMd*5dNv#FN^j(^@R!RF2nm3 z8=v^bf!Gwr{tT%Tpez-&M%{SAATpI}$Be z7z8T5w+;F*pzA4V&KSZ^aQm-x@3cT1*PIL_%HFT#5v~U_{Z601g~nq_hd4+#0S)^M!VX-un=zITyLc4iB;cg zj?X3Z0iRDsEZfX-0%=joD{F%P`pb$hw>XW4gfx@8%L&~Bb6S{@^O6lsrj$f?CBbiV zQoM3#LK7XM0%=DI>G0g*Tl_bl;5}6MzWy`Y5kgHF6feS`vtyq}@>3HQ8u~^({c>11 zxj9U24(b!79S)m`LM;NPXmIE z(x)P9sJK10MeG|Z9HGxe6W-hf>dCZ3heJVdy(wX0XH3-ZMl|W}m!5ED_bh!e><{ZE zsfYv^vDJ}eBsZB2-wQB8a({N{o+vhMR|=@T`$fmwFScu2Uix9u z{_bP%6$B5fZCNzEI0*l+jWTngf6EB$d*MAgwaJs1kK1PdaGC}FH6igIpIAWg$m1QK zE}5g^Ys#(Z*l=i_=?~=+eYvGiz8>i>499*Y-xbRT{XnW%J$}Ey8Fx0mxpE+uj@~yy z3KNG7u;GPM&c04pe9}3pYwu6Yi?F|ze~swRpO*Z#$#4k;hia9Q+v^$7JR$N?fzUVD z4#X9t`BK1da5r3TX&8jpaS!Z2Ylqt8y>BBKHdryX>Qt2z0|Ry56tAN!=#4CQ(f-JU z=;pND88>+l9p5nDdL6-sPOphMBc+X1KlbZBB>Yy(2eT!f{N57_y<#n1b z>H-b!!8Zp6i0_Z*suw(2k`_qs$d4LXOw^U0?!gTNKc#xtyX-|O9*~}#vd>HoLs5vY zPYR(Etf@4)KdYAL=lR`8(Ya4Y*U7>3tbAi!dNo-s&$A%>@P9Tw9CF9bs3l<%&8{Go ztI{6LpuD_&=eJL}?~T($ zUVmlzrdb4ks5o5w?FJ|Cx!!1A`;+KL{y+BKG@Qz~3;UK-G8GCb5*200JP*q}&-2W- zZQHiDB$>)Ase~vbBxHzGk|Jd)Bx7k%2$|EMgbekp`#IhZ&-eG+eYd|%$H|*Ec&T81Cniz})vIXEYx)DT2;r zIuSW5^eYDmem%5i223YR$VtM+pjQw-sNQ4--|Lt{!2AKh~ zbb|e!Q+_~j4~k<&Jq$0)w9L>eFW?dR^LXq-&^0HL;P0`8+d03@ao_p67HTmE zlA+>j7k+NvWz4Knvee*J;*<9HQ(7S9{@QI2eG*f$G4CezjX~h>JxcX`9k{ohwSyds zxjsEzPkHOGE?s}F_7=~Ndq=)SL>;3+eaeOPoJd<(mr#6?``iuQJz>q~-9Q8uquW&W zAS2iwf08Maoe1dze>6_)m4|chV-Ne^cZDB%%Q9Zb#oDWN#mg-KXQuQ{)C0&Tc(h@H zV*q_DBlRV$1G9c$C3Q0D^;s(9YCe4aBf(V;+CV)St$M!Q1KhZBHn|K_AY#kJxqwh_U~8nexa>y-j?2=~rhN|ZJ)7jpK_r6I z&A(fLLWR|`3$A;Yoq$K6F1!k?z+g2A|A0K0V5;a8`qm!pzpG&6WCSdXtBdC_k6p}E z-P%r*28-6a)X(|2!b=K8u=1=mJoR+yy@Y&1hl6gpbZs_3AIeV`WQ&{yn)&C#Rtmh) zJ1LsZ<^}e<4>ZhiDnLQm@`s}e*07mbotkpm2V7!xH?=Y0d~Yb6?ffOotuMG}p8nVm z`aeCtFH5$B;#~G!e}9-k_uu~O9$(Gi_tx#FMX*0`K0|1}kGvr_?RReF-4>899pPMC z=L<&yO-EIb%gAlTGE*8!hGIg9v$HpHh5o(%-GTq-4&?OupI4t{fql7^zKZ2`pnG?V z(H2V!2;LTV?bZ)63}uy!RN4AKj;!3_%sxH1t}ORrXq!8@8C?;Z@gTzWbA^@++e{&l z;fs?#Ck2Ey%b$CP{jo!Il}k-z0aGj7=n6@`3o7`S9~rwrQO?%xwjQ_u<*(V z!mlb6vv+pa|N~ZJ9t6|kFiKknhS)he0fSh|C>nWc2R!x z*S0k}k9ACF!6zo>yOv`z5O%?Oq|YB^&Vj6>KT6S;e``#{*^U6mesWUzAA3M3tHMI- zb_(#0r4NrBbApDvH>-h|Q;|LXhI*k1=bZ|Ui>b&nd3vhqvK#7qc&FM1Ki$N0SOHOY zy;lz&N}hK$LVe)7unyt z1AW^~evZ?CLf5*RG~)r>I(yIkhr<_kFMws!Mlxh3GBys7)u7_$WZJHD0D}5b@=hMiR&9IH)e|1>{JhkOe9Rq!ArpbA$PGP~5xGCg z7c9&a^L}vp!v}|FL#IVuq4kD0ed8`kxL8tm z#6GQHo^Fx;1rdHYZ+mwBgf)D7&%@o);Q^G)M02$g8rB63jR^%$oZCAcYQ{am_=BXE za{_j-%;dlASq|puoISA67v=^xzhx=CV#c}Kjm^K)m~l?G%F#dMBL(diD+;gnyFRAe7@TUME|^XJjyQz)MuopFSuMl|FS}ERwU|$ zhWb=XEvZoaMZf*Y5)CqURV&(L*dwnZ^;_&EA8-@Q)*L&BdQ$_|EYVW@e?jBUh0p5X z5YfC*5_1OVqm&0~<{ZIf{qY$yA(el1@L%owzjwe%C|C4noHLx~mrj(y_eZ$Y`G~#O zQQwi+Md)=V!O~~nah~TUa9Etv&u=pY4j%IEYWrmc>cw`)zU)Rl1Z%MB3)J%x-zc9+ zva$iOL~DQFEHds37o{j_$oVkaR;|0P2{fb7ondk|VBYgrBfXpoq1<;~dH?c*N5ixu zKSU@HoJk#CAJl=H2@diqGUDJ?{C-_j2lLR5PK}E+`oQqeU4t7Ps<6iMs3mvN9wstm zZ{)60K_K&bt)33*J2c1#4>Dj*TX>~yn>!Jn>lrzR{>AgyCFVN?r_G_Ra98t*J{?dt zEM!0Tg92t5taBk3JRr6_y5eZ1CY1DlXX!hx3u>R%y!pBT7KQl+`%z#0eu3lM`>j;C z_-4iQDm@i?jRSfW<^7=R_@1gK*L{$0I(sQe%nKgW9p<~#WCwH+iTP1Zcy4~Pp`$_p z`7$R0zj=4tqyLxiTYuRMvYvF_wiA*CtCHmH88`}+0R~%QNZWB0FQ(Ra$sctC|$!`7Gb5vqOLT6-Xxu!HG!(|$MD9`d3w+18L4n)p*Q`bxfX0yI>u#cj`?~5$qHjxHL5vE#r#&Lt@SFT{~}(z3p2liF-epsNYP-%h6wNw{??oHyIpM z_+_qsrTeQb-0bUKug{`@x6`i#ar6&gD02-IUy?*WubAXwohPI< za(rfv#vEIvBKj>csMFp5@_Nv`0&HEKUEWD>gfx)?wU&=GIMV$moDY2}A`a@p>5Hlm z8CCVIAQ$`jT1kzYUbX<67KWQ<02b6!4!>X{z-G;&lvdAm*eEAtf_RcjPb+ zlkh{n^^^)Y)%}SQK_AUV-7uLMdjfQaG1k3AP7VK&Yf~rpBTpvnz7u^A1q|I~@4sHL z1B>?`t1X+YA#ZhO@GW_FIQO#E?IZH$x1VV1+;2yLh1-754CTCFZ_U0Mjc`{mJD$bE zCPsr*p|}gAX(On5lX^Kt-V@#xFn$`-N6vpjk+B;|3YM#xA2nv6Pp14-@g3B$RJUKx z*We(4vi3l6QkV}|+#XJNzl3}EP$nOj*Ur$qDBTtL*$!NrybGRgqrk@YEs+W74lwAp z)bAf`16l583qLWSZgcO`iAD6;Y`!6WEMQ(4G%E%|O6-Vm-*x@1@h}n6TA5g`cxXdG zb?42<3NPTD(e5+V@J0^Mq0J|Qb)eDEj8kk?78EQ(C^sC8z-hgzeJeBa%Id>b>l{g7 zbmi7F-{2$QVyYz-;1_v%uZEHfWHonR@TC&q(bjwk>2|Asb?|?@4w@a_&TM(Y8HyaOpB}({ zYs*Phf4Vy+aDJf9LG85>EZHmsNDj=Ssnac4;I=RiK4NQoc3(U_-iY^1>2GsTwN4}M@|G1?}afd2nXSwXgasKfR* z7T(Te3XCAadV<{w^2)gLBdhfwd&o$7>qb*(3=;`Gj=Jr8%2HnE+|e)fS~J}{#u)_5 z3@6Mw^kI{Lw{>`|AGFo&>K{6dTpw|M~%piv@FAE6NcsX5SkLO+4b9tYN?BF`Duyan9IwdvWEu6^%he*=3HTIX4d2a9R=>`%&VMO zHG)dvkm31EXOO==T({R)59a;rGTCSB!9ctFURk>jES^$Qs zX@kCMzK9CCHXnEwr^=K6LJD%^i*~09d%|AX7_Ya|xEKBN!swwD0nXWZrY@uJhOE`~ z*J`gcd@Y6bTl2U#=;PAgikz^AT-rMNL6~RGBp$OWrUyTTWgn^?fG`JY~Bjh5&QrN175o;>K~5huYCUP36nQMM?|BL*WboXM~`}e z%&)4oDt&&C(_?Fc{4#z1UI`T<*q9R>hdln(zyHztw>0e3>)37# z&xbUmCce4=OUNNL>75?n{QZqOLK0~5p91fGcyD-APsvB;!LC#zviikyr6|$voF6>0EU)#=B6%t0&r zvGikt=m}4M#CissVy;MPWnYz}C)|8k-uNF5N}y%PN;T@&tRxNYo#}9cqNDRI{K$LR z+>$J6sNo0qv^=U}Ug^L%DQ9&m&kvevd1H?XJ3vCqu~%1+Cz174{h^$`D#Uxezoli2 z+?47=?T_npAkv+YeoW81&mvza^caY*WW{q=qjX%$t9?fsG7KJckO2 z8TdT<0LQUYWk$x70Bp=o>}$P z6C^UMoAc!T&A>T@Sc(67lqJM-wXE<=xd7WuI^s0WXDchKN`BLMLXNK62q{1Y#%w70 z`(iLZ@ARyAi=+?OFrB`|&X4)U1&sHOqMpyrdhT6fpD!$3G8-r0Ih2c~aho(N6=tu6 zgndUH<615!#rB#z1l*7m=0_gRc)4E}!Na8&bKz+U_-rMz{YO?4qr~}300&3;rfGJ4`RF^$dK3Fe8wBP zzMQ0wxBkaV_+Kl7dGjIlb#c}}NO>%=iF2c(;0K$rfAnbT zar-8y1Lv4F$bGGGf>bv?)rWdyP@djwx}jeU`kK1G)nBGSeNaMW*#ZTeuDXwHjZp*V zzG&-X8%*K*ghPZVRSrrOHNzBcAfGex=Ht*5A29FupuS7o03_erICDi?fyiLj*5;F* zP|rNeQQjmEjE>3|`ukKsf{ppd$%8~_WxIThS=0~ag8a92WBq9#-mG~7eW_zScUZTX zqhI1xOyr&^thd{HE%i6K!la?fDYII2(BHwIS%bMcjM=S|w>RN_G)0%lblwRP8I10e z{wjcNzrP-N#0FxQ`oE@2;k?RaPAztiJ;d8c6bYu;!)>NZUMF@Tx32WpX9iA3aP&Rv z$kt#D?R_>EkB7L!ch_!HMdX@f2F0!EdpW|T(6P4x$MqrcULfoH1-#Co`Jr`BE!ZV| zq;tcP4ZMD$_EA4a4(N8eUwJ5v=bV+^zQoI}(Bb8=@lY8NZo{XaXOPRc;1XZ9@WlsS z_7l(fpTXR_7x%c`nH=C;@|jWlPTXUYZKUq*C&2O{Q~teP$j3Q4{X{&+7tYV{=Evo~;l*ljzxyrlZsE7XZeYT8K5?pF4UbU7vz@OzQ z$1r6A#4$7kaSy4&%es#3lNnBzgaX8$>d2-Q8vG1cQg_jtxzc;ZY)O--q4a5SMk}qTIA4 z1h*eCKkwoJPvu0v-cH24W~0?(LQ?j?*jlJM;cxlx9QZ$005hDE6()DO!8OG+9>OC% zuyE#?orYadvM;8_qhO?}}2i#_@h1FYIWoS3XxK7#Y<{fl3NmOUU+PW)allQA$s1*cA_ z6O`Agmwz>)2-M!CJXMB)P$i;Jh zRsK5#Uj2OR9gKNBsn5QxXij@T^wB4~4qn#)LI6?du#P2GtJ^v8_w`}*S8%T{!3Ct( zEB+iTL7zTLscFX#OCSt5g$ZyVw|>2Ex?(~Tq^);4ZbtoaZK?j1VdP+Ktf^I_@3V*G z$G?-m)gTAO$=C8mu?{>*kQ8o4T~Qyg;n(Xx3Unz4tlD6GcMJbpp~ zy^_xd9y)3Qqtjr>o&!Fh9$RTKi+)+|g#P!Fm7egd>b-jJQ`9BC9sbHD3~FrvRHs%%39}Ga9=F`lnlp7{gs2`8y z$qBZHyqEMZcQ`15O`Z7Yy==_a+!esKX^8?k-`qz9%dlTqZGRuItOnI=r3YldTT2MC?=Ce#;qk4lCkc%1Ol^cw*r zERQ^pGQ@qYfKHP5dv}<$C{6X^~5F}ptY zhS1bI!MBV(KswKVg{g)Dab^}Q+wS;4X-|Gb=Udb-_p0mJ9LBs0->Vqz<$^idZfQAD8sUbGl1yNy~Wt)m?2kr?fdQy*= zxu8z^g19;Q^s{;YdS82wc@e%6L9Cm#V0lmCx^=V>2sB1VKB)kHlbiK5-xT8v!mx^GM4YZRcjt5-gI#S0E}9?`tI;0md|>^(Y`4J^8u#Psp|P_FvN6xZ9sMd{e}tM!)fy;SnRG|>e@mJ9-BShPT)vG~r=32zV^ z2+|9h*9DU1r&`vh#*h}atu+0C9SqeMuEaEIL&u@1Ps1t%*njEjoEPQ*#FLhf7%cmN zbYyWzpq(4!Z)qGQzSo5YKDNb_+vv9~KTfhuaRd6T*Dmx+$$-N9*-VNf>Lv%Big=xT zVfWD2ahuHmLW0~qZ***d#b2oAb{-k7P&qfU<6bAn<1~w~j2jf&eD_tnf}901QIc@k z0FshzwYl7t;g*I}0fB%&=a@g{L>>x!?pU>k35fMP_*i$%mh8~aG=$?n27zWfB$3k@5^Y~-mxKXpli)`?)M$P2NRV82OiSE<{exN-7-OEPrrO&;d@FX6+T;ioAjw1=nR#J-{$* zN{sUf1sD&V-~Nu>0w|8Rk2mZ@Zt(GPGe6`39`WRxXxQTb&su~c#`vV5SuRYd5bO2R z>kLY+!q{I;@OJpT^Mr#XtZ%sYcmrWx#p?PeKTtly|5|*+8#er8;F%7Rhc1I#PrASj zqGf`T{Do+6(2k>Fb|31r-3s`BNI8LiLCL~~za|i~>X1dNM?Q4^+dBumh!EyDBt>KK z0bl0Nw%L*<@aCDl?X;L3toU3Ci9vqnkdT-5b1@s3dCnkM&iSH1iVU7%ngELX(d1IB_joNk@M{x7IL&Ir%9q|00^t8eY$u<7YvpTCpgRY>;_9g zttku4m|OKnDe!Uv>T~9;jfA6+Yxp-?h8^=fid)`znQAx!RsWH-6ml!pZ%=&V zLE|TjOSaIy|LW!F7alMnl*dr!W(jMb_WBgq6H!lkac5W)4K~DtKXYkzf`BuBG8LC` zesL{guo|Bm(ao8^?oj>UYV(~my@z^Wxyvd$bX^smO!Ik8Am`y`o}1?KfFTgml>{wr z+kx|Pip+58amqQ71aKf5$(-3pM+G(}rFFJ^@=~@rlfAS|!@qPHybxaOo z%Or2zin9U1JEj2wnci?|vGN%myC+;Ul+PDT(}VGN-I5VgWjK1FS^a9X7T8`Lk9xPP z3EdgvS$rNkkY#&(N5!HRkmtS?da63WwU35f1|Ghk_x&S5tkM^nJw)|C$+<#rM6`@j zffBST2rTrSa)N&IPuHu92tZC$6eDl70EXg>pQgz3Te-;A9lJ&Zp&qLI_8Jms$(S`L zup>V{TGD^`wlxgr>|2wnwug+|dW++kb}-3y{ImCv4Qwkjs#mV^f~R5e1J97>^}dxi zSUxZaI3UP(;E{( z-6c_NjKL25+i2IYG=|u#M(#h8wP0J_>7HF)`1~jjxcE)a2O>5`Ykc9-gWjAX(-x3| z{IGp~+x$`IlF)cJI0yI4F>H=)(nc`bcKIWbQ5x!oYSo&W)nLbhdD%Uj`zfEjcla5e z<9F+EB=likXWK@W=Z?mjpmS~hkOulyrt;Ie8_=%?6_tXq4N|a_F8y&%RS8VDUOZvD zO9D)m)sorqIa?vJ?4g7CCBOLR1a@TT!c=bPyp<0DiWDX!%*Ro$BS1H`EJuXbwIaLD z*SSJdZtBjf-iBaiy*8|zOGC)d&pLvvJ>~>IURs=U0OhnTDFTJ z$HcJZ#$R)F%u(VC;yIjS1rP1_Qt!Uj20!}2@(f=aI6QGSgQ?aWvesFO_qU^NO-$2r zo1rh%bp+dlBx-^Y-@5z=`c1m4<)Zh!$NZA(sQ7ktg?;3a=M~znFkK>PW|i#;jXSw_ zS`?9Bu>4i&!C$x^;nql<3MasK{Y10C0?Y%dm-OC^eQ|}jgl$r@D4D2dBf(} zHST>Huu{JK`yC^}InBEME42;~ZgcoZ-extB6CUIfL2je_sN*k%L>-88n3i>E)`dMR29JEV z_(K2hD#b)$6KIM5_*xD9ld)Hx(C?%pfHv#rpE=0e@gi&9~Y$eNRKwqMD zZK=;0tki;vmoTSAH)vC2(xf@aeFdfKd_*`kd3?vLj61|Ptw{=?k3}t2`dVs+8F5^0P z+4{GjxH$)I>f$pa-Pk&z4hD(I0=dnZHdcbSTQ!@RcoUzz&as2_~BPggLFbb#|0-@VX`ME?8Nvb_nV1muN@E3yi@!yVoY z^;!DXu>XXAW$`6%_$e$^Uoww#(i3MnnKq)Y?-#$he!4r9q%cX@V?TbQHir6u<_TO4 z9g7L>m_NR;d3Fr*jKY;4T<PTXIBJP)EzqMz&n3%xA;KXkeSIpnI^;hdhtT*_z*gZL=pbuxZ1=PgW07SCvTiv$Z z2f$Oezyo#EZMuiD3iF)7h`b_TMV5gPrF~OFSwzVGtDfe)MukA1$#=Ffs7sI6+#I2x z48J#Q9r5fSKswutFPbLK;8@(1v`L5nyeqeeVf4tE-nl_?+`$5to&AMMu>U@6pJ>HR zqXBQ6LSzfhKhyc9tSoS^8)lO>$?uE({czxOQx`e#s8oJlElUOlhn)sd%*bbWka^)4 z=0*vp_`Y($oUK^m=(XstMnE^%`z&&g4;<(4-DZ5u778?+T+{`8LBUxevlIO!za?KA zNa1-_>i&9X96RRURkE{ki@D-lbj9*mzt6w=_dik_pIZ_GQeL_P*K){8{3iwYV0vEZ zFO>={M@)aX%~K#odfVXS4=-RK9Jka(j+{=P;EiR}w@9cRAvZ;+!}NOTgkiJ=tUJ?Z zdW2X*ojQ$k)|CQt`vc45QXGIwJ|^|)Z7a|Z+IiygOMabMui z444SqYz*O|c4I>(Y7qW5PUplP%yk^9W_~>H0S}^&-;%4x*fNnsXKUoH&ixQrQ{P2~ zc;8lO*9CicDD#c4@~0PMarS=e3BVi@!<~NB#>g!&sgzm%f%)Kwg}$L<0FRnmK80O# zgg<8Qwn{~K!pT<|8h=(iV0>wBIO(w~aJo*6*6*={OG2@wqocO4uldSlHO#NuBc{pn z9l0sbZnj4;ZS;cM6U@AV0Mm& zo*-loPINofzIS^=PYhS{jZ^}-g&(?-scZ!0ocG}Y`fXvTjkhHNeJI+jYb>7T~ppGv%)_rwx)(s?k=^_VbG~u}W zgULB>JJ7EfQLEc#4RZ$~oM{K-Va)BO*-{GbeKZ@gny}8*%j8QxCEA0vL1p3Tn;yWl zeO7?F1^4|?`F>Z|4WXY;pt1Z7>bq^^qcSjmnBQUh`PFMyFghY=dj*`}3jGECzYQc% z<=cC;KGP7cnAuOycv3-mXX_UIDtpk;6mV<6`gi83T>fS*3YcrmT-%{5k36iFPg9cS zutrF5xe{*-b)lQQwpaOq9_bcGj*AhzsnkrVFjj}9jdfY96L=ohntU8yrVh8O`A=T| zL-<$!{>$s%ql==E9hO=^`1|>}sh1a=2{K#JcQgi%2llD!VVLJ|`|6=8eIg`!vQEWL zT7&$QyTD0d0{HxJH1O0S!-C?;R2hF6h}pukn2;?7!@?zs$E4*zxGaOuy3=ZfOm@Q4n&4yLz`LnkbG?M62h2|JfBhBEoyKf^0#UJEdnu-4SH@caJ~i z^n&3N`3lV?PC)oRZQH2n0=^OUn>n1&pVxUtOl{E;jDJ{)>XsqLzotE61m_2PO*H7| z9aNx;%tRGLpGo!?Goe?Q*YUFJZ^o^DfM9iQO}qQZr-eqI09(u#)s_)BNW$yv|#XdlF&)J(~$a2#DmB4{>%I+UEh2qAbV7vIm zzaQrT%=(J-$cYx*mz{iHl?>%+T`#rt&@b7a&tY}Z3DUG)1``&jAh#{PukWcL%-qPn z`uc|!F#J5DkXuUxjxS4XX_yZk%&@)YW3LmK+&E3|k2-@R?gmFjsAk|ER4TKy%@6sf zDZz_#1lVn{l6$NId8rTE?oI)6CY*$AiZoThjbyn^eApa9^JGH(JplF}qS)*3<9_`t zXCP6L1cH=5E#-SuV8;6oDfyijXv{fm*`#3vDZH6}_yImoFv!Ur=Pxz@IFjCHDrO6jJBtXbHv#fBPcoe%dqI-&{J2V)9Y8>_ zS$DrR9KN3vG81DBzZjp~xxl9h)MAqBXqp7@jJ$ayQRNN{eJdZFC^V1-PPW`I)EShg z$XyN>hg%;5Op;zYfIn?wUGODx3;fp_57eRW^!u#D6GO~XMo z52!^SafdmN6Xq1uNpRdf!qc`9^Bf2MmfI3EAIJ}uH*hX*7n^bKi28(+;!^A>jtpvR}GWgnkjT&EZ;TVL;$AG3O|11 ze)Ox`2Kh{OQ>YosIh;ko+_ec~wJcXx*gUVwWl-P(qwDK-vL}!$MdPzuj`D_MMSB?^ z?C=7{T{1@R8a?3aRYGa&9Vd{z`;+qnD-j;Kk7<6xyj%T+iytiyVg9l1CT=4wBHZcu zc}6$S4)pR`t?pKPK>ZogpO*$+@SU?{!$#C|h(E~<%b@oFwPd?uf6PIPlvx?jt?+@5 zFG}0rqrW;-<%Sa5NxaX;MDw)n;rR_VbyIF4e_+S^(ly5@My|enMqnl_rSiG^VT7_eIf17@hRWQKrQn zLKS`%ZG9~cdj4n6{w#8Zb5!Sqrt>tgw6%xp`|QAYU}mSaEBZ%T+owz~5P>W_W3R|2 z5A@M=YwXC&c~jNZ?)MV)ORF}n3jg6ux=wGHc;N~c{GPl&j(i^OJ+Wrlre5HYKy=hf zGXa-ByXN^(2Xx)9HIfhKGUC~}v8w5K-uFw1UZWrv=f_0UH}qkyIHzym?$!r|V{Kf) zsh*I)sV%38{=@jJc;W4lUjNR2|K$a6VxM$bfE}7IZ+(a2CL-i??-JaHeze52pBWL= ziqJh5Y|D=ONqJE8?7Bq&d(q-5USlg@-0tgGB#Qbw(O&U`SQif6=Mg;LP66pj?{)fd zS7fJN5V|mEm_!3ZTN~1t>p^C}_ zX)2JbXLdY6Kbz|PV_{=~R5(g6pH**&T=ZeFO-+9^!B&(0N-X+Gk62x%(2wGCe%I>n z@oE5X)}mKGFvs#`gZ-c=a-j9&qR0n+I>RYDmfO-w^03QtcWSw`F+9vW71~~f{qkOq z+HLLHFv(C+<(7nd%D7h#?pM=bOo=8`zYEV54I-TlB|eaPAlRiyn*<}(H*&jWY@k8P z$kCx$3&K;km<1s}iC=h9^*ZJl%Sv=>>PQixJvN!ZtgQea9}MRes5-+l_awc;m}8q> zTDWT~`pYVqP37O(yTjL-D=wGCac=rtOY0`i_ifBWcs)Kj1FtAcIu~+T1Kw4skCF(W z>c}4W1$C4;Z|}BeAU`6DvBAtYlmuz_8F}=Uh!COtRPCg`CGOR2?>uicg~^>UuZI76 zL79G3RpSv7w7RZ3)e>Fd&Z9)K&s_`fJF!{l{BIM~`CgMud};&CJ+j@zCDbWX>c$7= zoxt&!IXxQ%^Uc-u&opAa=`u~?io|{Xyf(+PIn<*l-mU**=VJxY&u=9pqBN82$7rOA z`a82vq4|gC@i}DnR8tRqI>n!*PxHj;f!3$6E!BVBVSj>!PezpsI9QjCborp(M*HP8 zsZ$h4VtxL{Z?g}qe1GWhwI1_-9dhp8yg`LEzo*F`2)Ji2vrFgE#ax{Gum5Y8u;>D`F7sO1|p3Q{s_8e z4_TISOERC)KlH%NasIRxy!U$bArbZe7q@7%E4+}0l~bHvZH5$JTb%lIVagL&RQsq$ zhEYfS@d1r@lRadXaxmL!D?y-3WYB45A21aCt@7NT20>f$oWkE=-!_^Rom1=rtdU_2 zYWFN*kbyW?&`*MENt(k~g(xt3T_pP)Bkm`^xYi$=`42zyV*&j$AJ}B_t9AE5Q}`-O z8ZT2r|NZyaVa6^W5YgjNB%+RRG??uERGI|-Lk_tvf4m{TbT-ei)EQ*?-hW}RFan)V zE|xo$^}tNYQ%(VS^bc<(c7N7!gK8Cl6NMaZFq^9-a)Adq(R;*5R+zt5{MdN!Uk80y zyI>~$uE!QuAC6s6K8pL;xrv_fj~=k;?zkBH18Xpp`f=m*D^(b|spcz~K>~S;OAS#^ zXpsI;ll-C75@H)fiR0{cVDz_Jfd_fAapzCDB=?|ydNgIQp3VyhA@j-~&55v39e>vM zttXWJdH?%Zhzq1nmVL9j>Iqp>3U3b#dO@}SSb#YCX*Ghx|Azi@0&0;$hZkT@%9i5X z?sj`f7#54?+>L&Z5aIOw50L-maK}j?19j-7$y&nB-mv8Uyp^%T7aTgvGpX@K5h=8 zz?P|`g}fN9cX<_<_o3w=emS4h0lZ=YEuC+kJTiv{v49Q+;SM{D!fYdW|y1LU3%tyZD)B8qa!dY zS3T8S*92~nNtdUg&fv-BdT7v-0D@ziqPo;DC)@JfQ3Gp37%#i1%z=3fS+_C|x>BX# z{^_Q&he4LmxoARBylVi-Q|H?**ONiA=KHg&rZfm8wicVC-r1CXZ=_g@3mDeuOP>qH zK6N5L*cv&a{3owUdqjJKam%vf`h+zw*^oA$7x#mtksTuv_G zPAhSpwgroaYcGbpN$}|@+o>ho_qq%^o%_6Q2gw6v62pSts8{a$y7=82&OQ0Lv^HS} zee3JXBu;M_eGsv6HzMj=U)g=WYHkI=LoWykRV2`ybUE`8xuvSfd7;$;#pdz3HVv8pWKAW2X2mdCXDD=}EWxK7j&yj%ps~TE%ycz5mtlpMS z#d)GVk!1z_#bTY_sgIC*A@4VBC4=~f!G`DAjceUlgHos5Zo zaNQGnw_J%4srG{I@$N<|8!gCsw`%`M#q@Y?fs zp17$auvi`vc`9VSX znX5mJSwa^>xAjXUAK>Y88&Y7igWyMco>jXrS7GT;RiG~VG?+SBUgUc=dA^*`-bVnX8wKCQe0<>%$Ke;PJT7oWh-}V%O&>U_#H{R*d;YE}U156I z0b+!HT{7P(h56ch=iS=mPP#jV|OdgvcqSVZLTgZP*4utTV!eHFK}g2by>Frbmn?ER=4#eQ3WK2s>Wz zy>-_KST#NcF1$fqhj8;}x=sUFuQ~O1^Ko^6_~}PybBJ(!LYF=FgDHwcv+FiH8z0h0xo$Sm`@FDGnz|fEbu*5$v3?kS;kw)&NfJke2 z!u?S>yU!H@i@Z8h6Ob!?C0Xg@JqoxUw@}(RYz6nG(cZkt25f7~EOK$LlV+VQ)bx-5 zD=R&6x8AuzxLl@*$yOp*mwvHf$33sKg{o8IK?`Wjx+nU{0Ph!h+hhB}|M={fc5?bt z;6g25?+b1NST1xpynVqLZpJrUtv})mZ`-uU!q}gmlk~kNNY;cK!XEnS#+U~qyF9gw z`NXk}TJ&Rw9pK694oh#$<#=jL-Xa!>{p|P(nfrwvEW3TN7~C!m2Ah(PGT>gnO!Xr} zE{_GsfynMpnCG#O;nMAFj=q-B7QLt>QwTkf$C@oA2P|Ly(!Sp%L8of;XU28Z8_>Nh zd~;e8rUMP=D@~Al&tuFi7DI*pov#{1r~pnPeqLN3$x!od(89^X7R1;1{dOsO!yJ?8 z;lI+-u;c1#{kz+4us^bYzwC3&ALaFOm_vO}B8`29{S5LxR`tRKJ6u4yxad%Np&is^ zr*Pz=|L(v1(Z}>pe?oAA<&y~TwLSt(c z=EAiXkro>_TY%#7m!b9`Q>+Kx6?`wKa3qD{S!9Vl>^S9=FZWpi9xE#FbmxyzQ&1}WZ*S0u<4 z-Mc3f^FcVQY*Qv=y5afF=hV)8yuY*c^o_LJ1dueXd~_h% z6TY#h3^U+f^5W>uo{i_+!D^ezd@Aw|$jPJ|C)wP9OC?=i%MpFB>lN2mRFDUIo|7v$ z!3B7%7msd6{(m4J`HwW}c$|k+%f1Yw9{8cPMD`J9Xnj`JycgNq$|-{_x7M>treFqGMf@tg`N#fmKi9 z`(p*#aGe%>K9mW$R-QYC{+@7w<`gQ&_ZVL=*NoH=tM&!8-(z82%Ov=w%tWFKrNQ(= z3I6$V^tJ49`(!0*4(1ybcXy+HQ)%JzAE8kKZ0Aa99g38J3uc_c+grV$s*1kjOeu1< zuTY|9#noWRQ>>yA&$SV_I&b7t!Z;f{7;xW*^?dI;RhFFFn87?8Bemzt{i79XPzoQ+2%2 z1-d3{FVv&omq&-pNRRIm*~B>WvT-$dSFgNwug(vqMe`*}91Wq?-S6txPYw_r`FpS< zh=#h-cgKloBv_~LY_rC`E90C&rZ(E+^u8_R z-z(errOFvDZiw?dtm6jlPSuBSj0M2Uv^L z%gtdSSGRLL+77-~Pc z9f6-&MrH%+W5ryhaFap+aNI0oG?m8wadkjV8T;%ck;3fNenT)mCfOm5dST&pLDFYo z)O%{u-W(Ig>-M0S>b;^p&RC7ekKCaxSCUXQxQ0c&~EcC+@`&ZJ&{*(BAMSDDUZQTd7$iFZ4=P5#h;%64M zYkFWcYTQ3eGKbxJJ}Tx>V(x;t=ZiO3hyfqdBL}HoS&A<4WUEe;K-V;aprS@inx+R{xl+R%T#KaS>s$?eaoVxhdX?(+&n;e!X37Iq`NT=xPqsU z=#EoN}q^2hd&Z|Q^;@HHd*?jU2sDfa&={jpa^DO4gSk58MRU~41V!IC;AI3oOS?sx zFmKV_P5uwyT+wOY_|7RWU64N&xk3Hd1Q;ym?mEm7k&{9?lAD8b!mY(W*Ww-Fa8)i# zvJUb)MdY$>&2_~ubd!!uS=TX2M6RI z#HdkXzjWuY@8DY=caVK`_2*60Yi@)qP;IE-p6PO#+4dNJI2EM-+!1~LM+|fIb)+yq zxuH3J6Lp5Pj{{Efc6!5V{Gg6w8}7N%YYM3akYB-Scz5HhJdC+b4mDcn!Z)$Y8|75q zpg7RAOC^E`eM;g5Mp;hqLxVp(jzu0+?zI}o5Rntfy!3rPt2fYnDkL0hB*Wg5w} ziSQ)ZT)x-L4f>XevDr4ZP>faYsfRiw$Q&pqrbxoo7v6H2J($-g{7vD4G7+8!9#FPJ z9a3>k+V>ZO_Q2BM6?A9V8-jxVoT2RU00|S#B`R%e2sk!*JWuryNYph{o+;>S4YuupX-JdPf@jylBsi!xVcU4Zh+@onSPw&2j5S9rMw=Q8hD z*$qa?;C8i%_sKmE7(dI;@YK>7Y?`gxrW@S;*1vy9Z5;KcwjRhZfPT>uYU91Wu$5fg zN?O-~KEoj^rbNu)()}3pf$*Yd1E7McZW9yW#Dd8 zdjeyk4suDJy*{NH05xxYah*Yin(+Oz?4`(k3D7;6m*NG1bocL$hsuD_?k>@05A2Jg zb_f{bUU_LxPSgBR`EDznMqBROYH2*SI3? zrSDjW+*5=bFU_WIQyRf?%?auKM-?E<+>&;w#u0?7jF=j4quzNt*L4Q$XLtYMA594H z2S>qm=E$Rd@Ze3vL;HC=Z~mgWCXD%rv%iP$IF0&%g}6teuNiW;-qf_{t)L%cPfW4| z@)|hKwY}LTV*zc=M8=e~S`bW08L-V212oj$a+)5Jv zMHz|xR_HG7(Ka_=70KYf_03FzW-`4_R@_MH)d^ z*e#2*CIr|JX+MT&j=Cx5cuEk{{hk$aEsq|ur7F=M}_j~#N5PbSJqhDB}0k!WUB7d(r z!$-9b_4{%Nka+oveUH2=98u2p4!%x==;Ih*^4J<`Y&OGnS|p*AJ8YZNAq#lruRXVK zcL0P*)i(}s;n$go+43-J!@uMJG^{V7j%d%<_MEk&+|MBFz}xZS$z z2UY?a8M5gAPZ9Alj8KsQ!O6FN;&VPQ>wN!ZSPuavj7strDGtIJZ-LSV0SmaX$xJNO z$6PTgFV&Ja-tgkru90!%${TY~{nL=#`JJ zA5$VBms0a$uiraV|}BhUoMwV&-$`OMCX6ZZ*RPa-?}ICnTYmL!@zWCHe~JZS@EI2U`edEr#IKa6Ijxv=8- zl<@6a?N8(%Om@DWZo+vY_n;b+sH+cTCS45tR_h7xS{nu#Iqf0q;@cNr+s!~=+`sWv zr3EPe8C0AtOJq`_aw~~o#E`I>S#{nTQduL9&+@A^Y&>`1F?%53$5s<9q6Kc5q6#k{rPNjckDI5wuPByPzH0ta_46gmQjax zo55-_gV&-f?nZ>8Rl9d43>z5O$?|4I#Pw(=nXlLXto4jpMP=~H9&=qWp z`L%=BGM+xQ0Li&Gq8z83KwL^B(B-icv?$)Ic#3}GFNzlze)YKl+cmpO!e)M;f3Ny+ z9upBL6t1f4AXkC0PHaK`8}bYtk}b=eJ>c>7_Zw3(+91znLUZ)0K5)O^zJocL1X5pu z-Pc|?f?;u1>fYP;Z^S#_*C&j$sUhi57cd8bgQ9EBe zEA0l)C=)jK2ie2E*V!kZ(R+fL-rlROvmPL~K10{la~P!U=!TeCQJ3i3EcO+>CACjC z&2Lbsz>``(W-5HYd@2~hV!?`gBkSy+jRub3rx3+fear>tA7tET|jvM8CjV^V{omrOsb;N2A-PV%=$tk@UoSi zT!=-VU5S9kWVjuCGZEd{u!(#^R`J^X$XSp6{ctOpfqtI>;|L#tVX$qqs-O9#BmZfBg*SuX}iYX#1}FfyNgYdmnEH%n}a44cCmI zTae(BRb~z>L?Xcy=W}zMFQX^btifJF%KFW5Pxv_8;cx!}xr{e5(**Akp}ENGM)ZAM zi0IchAO2wn!+D8f;We&6m+v&7(0&LKxYiS9Xpob2Nh&c9x&C#n9_)UwC>K`^{@R;-U=7S%yf9v0WmWF@CM>T7U#u;CoA@)r7$D}Do zXdArxC)CCZ#9Wnhl6=e|k1alNB8UWksxxV8$@sl`4(C{&Vl|#-P0yH{cC=Zpf)yiu)q^APFyLZ)BviE$%|Hh zB7kcBn|lwi-agK=U*3g!XQ`vxc%-+GVcV2+(l^ZG(R5pv7+kak8rl^$?-SS;%s;+y zI!YSCZUj<}tz*v3Rq8aaTz^=5d@kd<23Sezv`tY!?V?{%!Fg6Ks!HGvVl478R>;FAyytB zNnO;t2YqFto;_?2_t=7G7xmgaKM`6M`|}>2utT4XTcflV0V-#OMb7TSe9GJiIgW$s zF#ku^xEc46e#6O{=TyCcA>qdzSNy!Apv41AJU>fZFcs~4=m%9tH3xn_as^w~&$XX% zKkZPpIIg;85A9swE{;0KA^TH`66by3Z37i!lePuq|2ns&9{WYFgw*oO=yOrd-e0W! z!3oGe*A11W$l&|oS#}}65qO5iako=DBA4+K8+BL!goy8v*y(5u-oN|S?jKizD_53E zUSY1i<&}bG6IW1Y?HJ(vf=LtZrR6Zb7B_(%RzK@=qU_<$LHcLvagOj~N_34C=dKCc z=zFFsk$;;rFV7`|Jk^M%hOUFkQ1$4@X46$?5KvS3(Ol#Mk3P}qthv|&TW>k{t-6@AkkB{y00O81M`JU+e zCKDt!g)q0J%K67YEOLg-4_McpUowUmJ%z(I$P@3OX(H!5M4oM(ho$^B1@MfDjg8>9 z`dk105moO$pJe_~@voP@nS$r={t~xuc;5YPzqS2^7nHS38Q(P3fhNMK@@KjPczTEJ zK-4wlqTY%&CD6M=%4Orgo$I-|Oe?Du$F^}V|Gltr5ZXnXdOwk2Y z7dh*ht|8ALBkZ>fFLDnqHA#Qihx@%VpU;(rVgJ~~vwIT1FZIYV?z0le)#nH@QVKRf zo$R4ufj`nfzVlird$%Vr-=__#+3yeX0r?WU<_Vy-`8+0}3+MJUPtx@VF@Hxz!|S7- zHmtRN{gP?z0aDE0Iq5EwVB|)0y76l*xEOi1+i@PxOE<^4G;tsMHT+cnofThLEw~r| zZVLI%Nr#U#`2LII94K5{NCx-V$Sx5}Phd&;I@K(t3k|x<1B6I-cvJN8bg?An_}EG9 z^W`&#{%4-se;#y#j|XaVk~N87xXW*5VFB+y#qen3o#;>HDBEd-=e(6}D*Z`Ircgm-f|JuVBB!X35@y`wE4Q;d5KI5#UzW zqk`+(wICwkYXa3()a{j|XM8?H0(VETv*qZY4Ul4CHa&{{Q+#rLZnw!B7 zQ8wGvb~0G>Ckk|k*u&3Phkbsfo5KC==O^#tsX8ie`Q>lX9 zu)M=>hY9jW<-IR@t|3QXn@`BA)(CYy9yF`d=zFZAyi~)zVFNAV2`7*2KM2;}tP0vu zAKppdBr$tB0BmRX9+|{E7w+y;9MPyB>{qQCv)b+l{qw^5Db&cZSgxn}o$driC0je0 zbS>fec++m75Y#VJTQ5)iw;M|5+OTQ6K3VDb=3v^?-imWWtkXGguG$ zmDZx@0nZw!DcO+Ep1YEhFy>5vmbP-Y>IM(kkw|j4RCR^~qLff&t~~TItQCz$NrJxN zC4+}en1}I@M0eiSANEj*jfNsWFs1hh&0{Jr7$0G|vOFE^J{W9P+c$i}h_Xv(XgJ;D;F$evtWo`Tr<_Q%=rB>4rLGcQ8Wqqp` z^s#5%JC6L7$((X$Az4eH*LFA_pXChIbOIZOxbG}T#{qMTH%<&cw&Au;J`8xI&oMF@c z$U7Lj(yR4@Yy)g9roDDo++p_F1IN*Gc;AditZ%o9ddeM^s?A;Nf%e#y8C=9Q%N>=z`EAVlYa z?d>!pIPrVbQ@0iQv9&q*^-L+r*(thb52^ovuN!GO)pb0=Bfxjy-9#jt?MSd zlmws_;Abnw^Kw>d!WRD|Kj5qA)sRBp3NLNMLA!i1m`wPdDMmjL#Z%YlMOACm(~o<$ zpq?<_Q0^Y{2+kv3Jdn>pJaoVQj!>7r4_>*pcW$$nKG4%Yo)vlY??lAf_y zOuQ!y6O8%I#eISA>f&XKBqPYWB9S;lNdkL;lF-78zrNppRI&TNJlR9b?2xl>8=U2_cF=uD6)#;B(H1q;$-O*{f{d$n% zI`?zxoi5awZ&m$<=e2d$2F5Q}@cu6A$lJ7(gO|JlGG5gd5VJ~SH`=TT6+f0YYLF}M zANQHUqZ#*-#~8jmM*kA4 z4IgDonDRB`Ft>Z6hvkwK&?$F_|1oq2jXyG6bejP%aE_0`733xn?EuD3_G7qK@HADSjlW9QtoJ9cE zk=sL0ioC%$llxl4X+w~mRSDG#!rY_Z2YaJYud}^2XJ?B)_R$x zZaJoXSTl5kn4d4_zvDS_xl_A;dmZX^B%L4LzGn=9nN6vRHOg>4bZyy$fccewik}^b zAcH<}n9ymD`s$HyEIzB6V1AxRuu=5^rtajimx^xiip_n-mRTAmJw61{oK%9J-<(+k zTRdTD>mHfvhnVY|NtFkc0q|vSw4}%fH-IN2?RFW z2h)r1jo`#S>@L&Ree33^^HF4+ zP4bx29DEJY07&j|2*@_J7gdGzRMP!a1)E2*6IA5p(8=AGq?Y z&J%(xfuXvQ%F4+dY*@zL^dt9W*tj4)Y7_kmtYQ(Rle$n*HQ|~3o`ihadkIRSnoyGB zOYwQZ1Yj*z*)3lKI06pXMxvk1a=s{$iR=$Iwz7Msqa6PbAc5cZU6h6LlJa6d+Lb=De zu5;UfnM&J8GWL@cVmjYWN~i#_;cZO$V@J@R`{4HBBkCo;sZ~xg+QC2SCja|n|DRVN z+ABMdT&xatPamJm4#2tl@70;(jlR(AOXTdzaR%!}t~-hQ%wgKtyINBY z{o@AyUTrfjF!!-pJ&H0A!b+qXns!=%&H;na3_CU0c`nWCIh7rFo^26|w)TfvE1#v8 zIo?3dt2HlGFow;h`s6-a zB5q)1czWGhc`k!Rf@$ee2lRY8MPiX#Fu`Jvb(ean2a)&<6vAkPJ{y=BD-thv;Y1jDrW>Ar4Sf>F zibA+g%Y&r2HYfded;Iys?=EzDLe02jUWlMBoUb6f;;MIo=UnV6R>_`l;?AD8#NT#M zvQxIC8TT5aN+NfJy3`>eU84S41@iYLBxtJx39x*<=zjj1Kk%pTe;Bgr39g@mxL7|b zfUZJOMj`f>70%Ucx;fJDzROZ&A;TWB2O9$EM!$ymY9VJd)~@}v zGz>@1%4{^40*B1~*upLcD2r1HRskhouM#djKPm-A+FofvY~C3GHU?HUmfv!sw!rR^^=qX#0Jsgr zN#EqGpk>BE^$n{Hlrw%0X?#M4V%=X9yB?#zv2eO8dcqSzh*aZg28Pg@e(SRe7a691 z)w1oju!GU%1iI%hJiz)~oyH?s)V;jsxl@R|Xp(BApB7OEw6`bzXpE5fTmSx_72%)t z2?Lk@D2`rT5ORLY@}L)Ua2j5vtvYxB`$57P$v=J&$v+{ygUbpI5$!|yoZUcNM?Ahv z3_0=FnOc~7k;ge1=2x%u<#` z?E(_)WDpiSr=lx5c+?$v>ppGTOLcUr^p4D~MZH8t?=-WujquLo!Q_sgC}zes=5 z)N;;{H>iDYs;K6*gSrL3h1&+Ma6r1`9g~a`NbW84s5jDv_a)mOoa{9MKdQhPo;+vl zH*QAG-oU!c?S8g}3ps!muf@Y};<4zE(2wLhCa{*O+yBIs2(x?daTbg_Ld7LMhYPnY zz;!2g!oa2rgmnJ6_YUW3DHY*4>m$z4e)&bssS6}vp30FErFOv_YTEKNWHyH>Fom+<)RY6iMPQy9 zb7nYCursiw$qIOHkp^$MYg2+87SMJp{@OOoF%HYK;Mw0K3o-IH$IsyPZ)BJ8=evNq z=C2tSi&fm<;vt6Z25%2R;mnDLQ@FQHd8HTL_&flTo~m&;-*$rjs1j9YdM}{jH*Qa> zMSpqy9upDFTOCdDX`h=i0CuDJEp3PK_tA(fU_?HeO8NSJ@@`xB*kW6k>f;FVLO^3;=-=3;FPVDgDT$F+WM;619)Ax%qws)q~0)**O) z`_x|}hg?n$$L~Fxm#tu)ySBeT#12NzTZZYs4gk~m?1aH;Z3ppCMVc_HsrelZ7sg(V|!!dT>sc};%4m@@BfQ>o`@1$lJ!E>7yh~I z#&pdD63vWm=$DwlZu;`w$Bz<$%D491^{*tbV>$KbUW+CK64Q%re=-E_BMEmR>X8p? z=C~^G#RPWQZZ8|UUbJ&)4H_m=7dx+P&qJ8Yr5b9U^&=;PLM&oiD6p z`0RTzbMzVJOY|Oimy0=UUc{f)0yvLc^DZz+eTy9A($v)Eay_6eKVO@df&RKuGb!s= zws7LG^yYG&E!>_wEyNv%{pib3^B{2zpq-1V+*rqbfjymMfR{NWi#}Wzw6%k@id=ri zxd7;{)>Yr!I>_*SPObopi8T3+~$i9q$FMu8$A*L0@Ja< z&X~(5Y~KGeY26(TMt$BXy(17_(s)Luf)}uOHI|Z8bfAsr^5e81%$Iuaa&Gtx>PWV8 z`%V2oURT<5$auOuq(Sn9lI7RuY$$Oa z;xSsv#jXs*giC|=i{>zSGOhj)2_Jtr-_RnChYBRIh+tdR(koA5j-=>WO z{UZaWKPBuD6wYM98-a7$?7L#K3T|L-OuR0}ZU49a{o57cpY?^5;t3s8js&nBeo>Qh z%oQ~1-+y7!wS|Mf0|gk4Xu#ojCx07@5FtrCaNi+5SJ14Wa-iwKJ>lH8eZT_ne80h) zlS=?CeFwXkzR{`68Ma_$5da(5iC_W`R_ z=fe3Z^jCcci^t7){_U!}d)`PDe(G*LpFH3LuP;})8)OE+hkIv81;duGD0D&N+AS@x zr+tw6ObLDanbk7FTg*UHdO7?g^ zgy+a(E2frm7Eq>^Trnkr^MA1%eFBdc92d7BeQ~sep~R`j5tfAoyF(7&*!928G(JugE}N*IR3LvW9WVlfK_496&%p z$v%2d0K7d)z2?t`KI^Ui4gtc*kvf%sKIEl2=!IB_Bw)UOqb`0uDea) z%qOB*JNCCfpWGCa*k=R7jS@^z*G%E*w^Q$9sojAkz;25@at2j1hxPS7xd2l@`Pf7B zV{;vQrL!_mgrg(DiaE*3f9u~rtE~Oo&-VAuV$&)&Nr(=8axf*p70&q@Je;`Y2x3;T zm(2Fsf%)Nqk%(R|n9e2?S0&p)z};plg0DB&+J+CXDELB5@=V{eY&+mw?@z(ZZg7zZ zd7*(k^Z0pV{>338+_XM3apagXs4Y+mOrqa-EvCqpM-BPDjjF7nDtefo%QPF`Vhb@U zRiz(e{GhI-*2NzA?o7H)4ejN+0H=GOvy`HLZkX29k}m*yf?9_^vIT&srf6l}Tht>T zx&G#3g#&2l?sZilNW*J>vlJFtCwQ}Uv;FxCGEi20h&!`zhymdi|J)PrUykNe;-Hium5)Bq!#Hdcx?<@UIF$dJ^t&ajOStd)$}biCi51)-w-ywE(tW(muTL zUIUz^BsfxxeL+<2vII{J_Q#yQBoQBP_({RB>*OiSPYM2FlO~3|Re4{(j@QVi^VT1( zL|=b&x5~or6=z^Fc7L;KWCSrRLfm4g^L1)IOsR1hb5;!Kd_=}f;b^GoRk0Q_T*>Gd z)zb3>`du@Ix}rL8XF14--i-)%N2+w-VR68|vu8Bnal^dR%T{k-Y75peF2TK0 zs%lS>i7VuXl~A8{B0%34?fD6TK-jl3-H=5=0DCnR`?X9ZpxxiNU&7oHVhTD@Xo{qi%6xz$Wg}!##s)%@`Sy7w5kX$9 z_%K^?_lt68r%$Tx0T7p2w* zi3$Z9H_RdVJW+E;HrEz@=Z1vhsf|Hbk{@`@O|wtPLw(`* zz17DD44?BP(%vP*ZKJxT>QdaNPCnSM&9DL5vAxTy4n&YJ54p1&d2~LSTt~Mn*h2@a zkI1PIZ_wsVe{vo72A$7%UUOR`|8>>YD^5TL`fjENO(36>Dr9^7gCmMi#{7ssdesQJ zvTvMC-yQ%t9A&Z0+ekn~apJ}L4fO9gUH#1^O@@07$_KJ#+`;$vlKR*Q%uDCdOxl8c z9Mc)A3-qWft`D}Le-v*EC7xJCdjjwjX7AdjbfbyO_hALpoRPZN-TQU9e(@+hx21O`5C z$z}axq0=4c%(19j9DD22(<*A4&rsaMiOXE$vq(&=>xIX zq_-OR9ch;NNrFu-z(4B{8dBl{Pi4MV7cy}Ft$+W_vi4to)=XY(@ux_ z>_BbgbI|o4hCuz)@%kJE5on%|e2HH0gU>14R6?`X!16mMX!)o*tS&LlUXhW6w;m6G z3eU;nZ>esbV0VI@35q(8`8{FCQ(pNr<~o&RQOi_zBWM4KOMjIRausApN2WsE!LU9_ zvtT*^f6tNcVtB5Kq52V$tD^}QCRa^Pi(7zjysMcz?iD>vzDpfK-Jq3P;Q-?kcw{_RLdiuZ< zrF|28cwb`(+t#I*rqGt0A^BAXd0xq)F%T`f|HXxPlm39i#}67GhWXgv!}DHT+40ZkE#dZPVh^*C zIlS$D*qYm=0P?FIUp`HlfqSOl)xEgiPLK7QQLnQF9;uY9s7Y!jrR ztC3H$@u=EcM;ZddGB0jna)g1s9NKRxzz0av8a>*|T!1F@9ulj5rvy@B?!@_b#8ifjoteQMbdZQ5Sug zeAaUPI1zI(ZwPWmp$>hFr}FVn7btL{A7v(aLfbiF`i(++NK2;{e|Ph*uj9X50RBGU ze_sK^&J>n`C>xmjJk#`+!vjXdKi;~Ph4%w5Q|Nl49aJS;>o&$cEVM^&TuktSf)Gu*=254IcX zJlg%k9hNU`<1FCzgt>{GV_dr+1oU?P2>M)W1Q~&RpQEL)kG5Y39Ye0|-JA6q{K)s3U5VV4 z*-eJKV{0eN_W6MI#Tsc@%$I(7F?7BLbL07YUL7h!A2IJK%CP{fcP~AdM6bqqLGbTb z%g$ma7-(cynY!%?t(j*ZUfhEDO0@T~`SD-o7d=}X-r?`_U}N$iyB)lLecYUgylbk9 z_A_>Yo^bk55-ezv!0@Bu`4R>#^e6cVogc$GNjrET9`k8Rf=#!o$T@&MVOEy!?caUx z-*Wcfy8^K@0@+9TP2tayn^ljz9ZcqnENgDT`B)3Xz!l7GOgwf*!1%BnTg~y%prVJIKqHYz-obMWM~w zWXN&MFuC*!D)_v$CfHv2Aeh|_rZ3L9~buJ7;CyIli#V6>u>P80IIzwxjN zxx;H}gFVy8mm1pauW`;Y2EQi0T{VdZLG5%Do$gIbI3ZnjpZOgb5-pl2rT{qt*{+f2 zaL+t=*yZA^D{@?Ve3)v`kM*8mB}2>t`xyh}pfnjhD2$dmKYSMX(sj0l22wchKUH(x z3-`+}Kc|OpVI{$%56OP}KWe~4ud0XfF66i?sYRV|4*#1 zs>RZE47i`Nf6=#aB><>-6rPE$X@+FpYH#N@A|yFYDpv%>%MfGCuD# zLiB;3p0cwo!A8I#+NGNQ&J`5Jo>NIQnL^DD1~t!|phH<^Bhme$X`@TmhEGpncXUYwLg)3`bSf z^V0c&TB@Cfik>ByifvopX5$Te?+>kBe2jhomk~|*0Cg~B?PkA~dILh6^K7pdCPPrwxZQ?~A7~Tml$XqmKtfj3 z{Oc{`LJd;f=fd}uv+8}nC#}f9caYlISm9s(lXDx&3=W{$yxgSLCk+AiYd%YzrZ8Pq z^GjqN^W)=l<)Ys>LY9DNVFj-w2)(5-qHwnYbD3=h?N|KZi&>nxyp%ok-nizoo6-@U ziQM?LguZTL{R);CtmBT$u`DhcHqcQcJlzxL3Ov$67VXFryRNx!i9N&&?DuZnz60mW zG%x6z(obqkm|maM!&XMn0g*sOhV#X$b%4tN8DK z{k;PJvnwEHx+Co#lNIRmv%X71erHO$!Yj2s&Oj;sGpr!d4^-~YTYt~Q``_+SlV%-q zQn?)|maY-NaNF!Pl`!O8!RGs~I1eX0ytO|R_rZPo%#GIHEOLP59frGx@-zq88>?z2RnNZ-5p1y>k#m))tpPY3l7aoO(J zR|p;F=h%;2n)srl9fGm0kh5p_ZG3?r^s1*GoU~&J@qY)RXcU83rlUK zKNziH>-3n)Hs1%)kRV{<%cv-qDd;{oeczdj`FQqB6R9{)3uIrhikPv3 zh_=(`uIkBv!P$Q1x2W6WeQoFHD2I7dDleE-aUL2;Y_BztmVpz`NgjRt09(fO+8<5W zfZ-0an78c6ac0|{?ufdZd!l;}s{h8m`q#$^sT-DHf1u*38S-4E;uxM>)We(tsC;6I zK9(Ghh*$ST<#BJlmf_n^faGITbTe%Mz%COxaEBdzJG+~mwxUm2sIaScHVF4e`3}1n zqFtfw^1WA7x9m{&?mggd7XTVNPU)Sy>jkAWo=nG#{NT5{D3Qn488#24vfi|F1M9Ry z1{BdGh%BJzxW7*Z2;L#FkGCP;)>!}0%kxg~KYNw`ee~Ze@c+L8sY*ucT=I@UOIGk# zZm@>K^;dj#upfFxxAjM^s1H=|I^U;W^#dhuq7UL@plYe(`2J`&@Z7kzuROsKs^4@v zK0N0Qk8Uq)aVqzP@*8FDqA8j%U}LWTRsuOH%NeJ%J&`9Y6(yG1;SPkOJMWo)SAaLB z+bUDiF?X(NG);P0Lxiz{MH^#YJlLGn`JWzl-`DQ;9V8G2|)D_wsz_&-90L z?VYCC);@6HO>v1Z*n(w`(S?i1_gl+7tLVim2YY{5#HfKC^qjCr`O-xOY688B#C-?! z85CJ8#!5q*?3{ND?gav_UD}h29D{G>-5D#>`Y`#EoVZ}34<>SQIF&FJk?ydw4y?1#=i~QdGOMJo=Zf@yiR9oR}+~5n_gMmkUsK=6^-*!~e1>#g` zcirOlg|NU3E=NBLXyvoXZY{=qpU!R@hjC*_GA6rurVzk5@0ihRCO_CFd%vRZgC2Y| zQEpR2u6yEyA~8F_6KFC;u0J)91}Qm?_JwgTsITWaJRFDf^g?={%y+-B;nbHjYmcJlW~v(EuQQWj&?Jck@p zcdE;xxpGh@ATvluqX$F6K@X}e0pg^^qQrBW9{Lfz9e;@t#3jBLlAp2p~{8bk-;Atk?m&!Q9 z^QQKC>Z6{pt)%Xg-Y`Ikc#+ySMGKe^`T9L+gai*3^AA2sv81p!bysM%D}AA;WrLY%HlRr)mtpc4gcuo6&$jnl&}=$PRFb+GwZd zZ#)-8os=)Zyv&UQg++=)aj?wg6wAGC1rpO^oYaiySGXP|6m`xMlFkbn8EjL8{9{Ao zPbg4FSbSvVUK;KX4Rn_Ho*?Jl$nFr$k~=V}rS5Y6rUP%&PX!)8ZazPC!M2;zxc|K{ z<>IF50Un7bg{cY&kf%1?9N}dKmCp-)Z#{7sHa#u(wz?RC=8^l(%?mof?K?4iO4=BF zvV(W8Z}>pXt?aJR7bMUR6r~G2X$2R#reCN1(!|`$E)Cjkc5rws-9s9w3A?b%B z@aIr(WbMpXhPwU()nm5+im8{^i0*FCBx3rbfn)MGEKj@a`@W1ZhB0G_v`A5eBt=r$ zlNL)_q(rt-sZ>fKdy0xIEfh(=_x=0h{By2zUEg!A`lPYOxvWFYgt}S8yR7a{Bb>MJ5EB!@X_DI#H6l@a-hIf80=E6u#56$5@+8$lENE zBbkXYXC9zIuEtwaWUC2+)?d7uAf|++SK8xg#8cMyd46cOF$0SESId$Gbum}DdfwhP zHB8iNNCn1G@V)-`frsQiklp*#(~-*?HCi>7dp|kgA#nq279u`7x0u~yWIrp>B{asd zn2zBq0vns;m{?c2|DJ^~6M1v*>`VIpbI4XcwSjt&2vlc^_9#JJe(lb8r$}BfTj9vI z1%dcX@r|yX@CHXyik5MJGH9Obc5J>v!L1&_8XTSK6AfUm>H9=o4R zbsz56!~7l|KVvR`uuo>^lw4wBiG*A4%3T(49Whh&Pjtlm505PZiC5#R=$eX@0n)d) zu&G664;@rP929Y8p;fAO9<`X{Zns>$dWmpU*{l$|S%HeA0j~EI#NVWqqmn#Vf`Sx( zm)C{6Sn#S$Q}JJC39Z(Lyruchb*R#(zTY3f8y%B7V1K4?9MWE zm!*54*dnBYo#c_q*+S&pn!I2f{r%#d8duoA&M=lI`L3On?eo6uBz)%1yzU~h&*VSA zpWP&AhRh;OrMVr1n?L@_JK4?-^Oc=!>;1eiW4+g$o8|Ke5Q3Y`6clL z=kbb{f1yGtglWHCQh{(ex2`UgHo=-VHC|XVUCk5jzg-V1^aL~xmM*EN! z3KG~U;>YPo3u-;~eE|!D2_?sl^!kFg^O0oZQwAEerULSh1mMM;6O5r~28xaM|LH%q z4NXQ)?`FY5SB!MVsT2&AUkd^quV1H=M+C-aY@b?BPl|$ho!~ zkCQ(Am*f5--=F#6dDQ};^XY`IqVM)%bkrUP#rDePi@JfghE@G8nu67Qb^DHnSYdKm zO4Cah9q7*M$nLpML-^>!=RRR9e0dx{{N^qlbrCuuKS`eFeMG2XM!walXH&k13CfYd&uxb3Dz@ z_$>yAS9TZc;m(9DkX-L;61m9`DVp?_BUk=*4w>HG6Ul<^>P07A34boze)Oi@lp?;e zioX=UBfhnyt8TSve!$K(&$sSpV5G2aq3#hgl9O#r9O1P^s?8Q>72?78MNTtI&Um0N zz&1Uvf&!16OM69j`y)o;$NOqYlBbKW8<`1qMP~2hQ>k)Gyy6!U)>hF)e%Rf#(#NW( z+@5B}%vJ%be6^f6@#ML+VtjBg01qoS=AV%u>qDnujxXh|ko4P;(wHrIus4+rKNM-!8o=#dXKX@M#6ZSukg7- z*LQ=NJ1?0(vzh*Mw8$Nqmhz6(g?fae^rS255*1dT5 z6;}BPya+X8!0YX42{8r(etVpjJX15ona7uwUnN{%rEDk7zy$$#Jgy z#gq|mbV~5?usLqGl}Ah^k{rq|3oXWHCXyHiFBUIwL)@Vk$s-R{AZNS8`s}bXniN9= zW5_&>mXQ(rg<%#RRlHE)CVZW~t2*KP{VCvXe;VKKNb;{o71y|*^+&Np-Le272Z#hD z2O5OBAd54-@y`^Qe=$2BUUWJDu4kljAKOq7X!E(3t-=VBz0yB@j$5M8`nqrT5CbLZ zvG>M`Sy~NVn3gpLuZ*P#wMoM^_3Fuf%xix>1aAE znj1Sl-|{5B6#cEag!gyvMo!jJ;#t=U=3?%6N&Lz;wmvo>e1@j+b3=tM^{}#yUd&7U zqgsm;-Pb12$-bUbKTci;w1$N9p!z}~u)_Qx z?ce9foPVaWotP2Htvkues{bZ@`9++)T-NnE08|DhQ47tuB-eAqe`_o8nB1|M` zX()##mNjLr7R-0WrN-1ro<45`dmpV~PEZldS{SpR z=?S=|h;q~QWVTxyTTZ-V^An?C+;(=!T(VPo#chTBm}o&C;sJF%x1z9Xix~u) z%9Q@7(81XWJ8pP&-6MYMf1$4D5zUjzKrDr z`A;54l1WbE>fBPRr4N7=3z{#NuCsvq;r8j3R~Zv9f6DYFTc~I~N$b9^LBZy#jZfI0*<*XAcu9JI9Wrg03gc4- z=yoBtpR9y`KfpQ zdLM*z6>`lZx!wHyEk$t~$$ikHt8Vo#YbBccJ2YVY zJ?#~N+bUo~c!{sRQ$D;TIS$PM`_*KwvBb{s37ZW$pUCjPADu=# zm4<7|+etrY?SlFAo9vD#W2#HL_o`yYOv;h5>rS{X74fB)aI~{0&R3fgetmLIRCrSP zHXPN9ky5_qjIhwonFR`($Z(OFxKm(*B||E;U&*>JA&@_>_BQeBH4F+JCj39Agqpkh zWNtKMuWafg!a3u&h)=7q--c_g4f;vWE|^%A;pe;LG%V=Y?(72ezHa>}&BA`Ys>@}Yd{A)GUG|fv4OTj9 ze6#sugU$_ojY~I?_2^VaS5CDfYWphZ2oI3`G5fnll^)_3lC6r?e!&FanaRNB$K?K2 zE~0nhr#|+7+A8gTi3XlcX31^DpK|k{UP4mW1jRM=0(P2N)e0z}v96s$;q9$9B^;e-DvswY35sUcsuWiFSHJ#h3 z?KEUEFX-@{Wg^Tni~fWB99h_vd|+OgJg6eneF}s}+J5)g)`=D);{8-<8$Ip-!AR4! z6J)NE^r@?}6D+XEvMx@V_(@B?$I0zVCiOc!IbW{aADhLN^cin(#lrpjwBO%Rtawts~7DrzwY=|X%%$)G% zM*#tNsVux}XA~6!FP&_XQ*|+qC&j?Iot!tu&6``ZlWzGE3COA%T zhU__Eit7>mquDEokGfc-+{ulMa71?`Mg4^=3)8jR?OaTN&xI$4~NJKJG_DsLYIr^cowaWpGpUXg*-FH3wWKycLZVzXQhG zePL$){8;7;4UT1dK1aD2!S$|e43qRJ8mJwYy`K2OLFnj)(_$X6Q^SFA?~Mn z`h<_R?9vAQZd>y8+vJ{pk;OmV1wH$MXDjeusKBO>O0U5$_Bg_IvVM5R2iNyk52Mrr zXa59kbzzYlsfE8^DmmA)OVWz&U8jStxIx-b0u7&=sE-uLd0n3Tp;NcG9WisYw`4iR z3_j|#i08XV|M*3B$~RqWaLa$pe>ZA})w)lIxV2cA+`@fEdli`;)@7 zh?D-v7ReV4>jO}ys=M*VZD+8JIf~|9HU#suTzttbKRo++{=o8e{%A|d+&DGn0JQ~- z0}-2*FvRk7sT{J#^umK34eAVh*gZ$2M>YV~SuO8c1E^5tuZp>OTptfK`kxDi8sXe; z8~(Mb6o`mc)eIytkWqBFKzXSvI7)vk7@bhX6?v0k-Fb%C=(F$_TeC0jx`kz{5*~z$ z?V`GdKz9t*o^mL#v_y-~mjSj&CB)qyQ7aP%uAKQ zoLF&ibET^rJhRJBbGj4W1zYvT8WZAMk7B>Ao@kA{lRT8YWWAntCFO?ab~?Ncl`O5v zaK3{SuW{+;UhHrCI12yaMJoTC3VIWrczeltJ+<$(em&_IPvIovEJ-%`{e-% zyAtksi|z1v`K_URZA0YR`<1U*?*V%CNK%`&Kf)%qNMBTQM<4%0;u1p>jIQLl{c@ZE z`r~D1`3xx-=u~G-9y7(1<(Eyqb-pmM+b$FB;DnI->1HSD6u`GLE5JIB0x{8&rfh3E z_-eD?sikS)6(7$JA;O*4%t)2LchDF53)aX#COoTXz0`#dws}JH$9_Y_M}WJ`4JNHh zA2RX{fAW7)z;19Sa{Cu@o=IfALS%j|moxH|a+NP;KK7~`u4RI9(dw=c@o?txues68 zP4X~1a=&_iw?;feX}DyKGS1j2(KOVYA!vVyZHo*8Nf8GoIS9x8o1gAbXOAm>aE+GL zHyUF8GToAhS8h<$o0G6$2_16`Z%IXSdE!F-*Uav4RY-NONj*l^ySIc>qK7%$p)qgU zuS7i?l9!QIaaf}Y=BoqQtm9U=^kkn#k00T}_P?4*l_lqcIkpE?Rym?eP4GEYK@RWn zhJ~+6NVS!ZPTy*bbg2jXJea01@`j#{Zpl~<@V2;{2|mW;K;s`%wMSF-248`h3q$ZqQ>tTLYjlu zwopMG`Rj+$+)bPjEZ%i`jBuZmjq9#Hr7 zdmDAe8qsvmpcHN<3|~jZukNHHcd=D#2frm`Gt|mF`draj)x|rYPJCtOnA^PxFM9q~ z^Aqz3mp`IZ@qSpdF&CHTdBmmTW?Hhw zxVx!VG~%@lh^F#^(HY_oZK?8~AbBzoW#xlQRx!{fGFTznb?IW_8KInx$XsFt%kuNRAJ{E0S5*40=@mNaMaz{8Pp}Z5c`5&nBnux|0$Zh2 ze6d^K-y_e#7uR((EFxR|@FB`b*hQ8>)}>AN9w?Hzm8^>`J%nHX-KAP%V48}j+|SNN ztntPgpR|Bc!YLT!Quy(h?uZrq4ky0eBXirOhZR(0eX*;&{>PzibNt;dnAs zY=}43ik<7e7nxh`k6^#Q!WZU3xB0g#>q9goNWV173O`zh-d`j>Tw!skSL@!n!*EFX zQ9Kv%hM|D+IgD^+va2{2oMuA)U^KH=mjZJg-l(qK4&cz*^1b2!nalB7DtLw5ANf;? z_4_t##gQ{7Te(tfkZX1Q&$&=KmJdbTJSxG0RYq4>D9P2P2dUrr0bkU;`^9ncgcsP% zJR)nzJj~>_c2gY|6C-jA6CE-~!{_2TC_>hIp5jX#?7sOxTCTYLsHhp~kCw>|KhVef zM?Y9D$1Ks9zOk*R(-3{8T)9;rl@RZf{*ia71KeJ+=k3#FqA-1rNx=O8oVy~q=$bvr z)znK!^Ds3aX}N`I9wHCt(TG9KTUyZXB_7JVCK#OgDjzIJ__l?b`##UOVddH#-=le5 z@XYs=+$RY;=-)qP5xd#|&+>mfH@KmU5)F;7*Oa!Rp=5l+tz;^hYc6Qa{zbUbbCzex z8caUat+O zqBkvcXer?y`sUS8RFxc;|(t#-sUB1Zut;+@-)KH1U zF+Kc_HT@mtWCkvgw+A|MTo7@1@53^7D!Lo0lM?E^F@5+#_p>^8_}}VytFw=APi96! zwr3J=XK?SI!AP?2Z2fZ1XOj!I^9Njz{zJvx*LA8xhrHl2b<2b^(G1dmUhCK2F@(U9 zV>!(t26*XT+PvhXKGqHh+vb>9;iK7yAo*KvDCWFaJN$~|-m22JdVcpnRIKL5?I#Ry z()bL=A$>jYl~J73oZSeAbw@{{t3Lz>o(tOa(lJ3Z5}@7kf$!GG>uwyO<6wbgXHuUR zmTZhm{X+5;af#th`{NvmZ)xM+Y&|d7t##cZL-M;av9|07$$C?+@%`5~ySy+}(f5+# zV}$oX8EJ|6o><{4wOU-#8=9ft`*Ta((USNv3kUr%u$tnWeb5A9LC)flDjfK4yD(;- zc(wxn2P?p@7yF<~SOkS%=3SX)=z~#w!BlRCJ3@91=G`D1W7~H>lH1~3(a4y-p-Oxu zB28IRQ$M`WU%zpU9-l5+*D0yW?Y4&?Ene86iQNCzW%E#6{4nP-7b>HTp_aQkc9QV7 zE=cG|i}Ev3&j{o>W=^WSmYSH5n2Me?!}zb}<9 z@kij}YKddHJ_uhVq4l`Z8MU6viewF}vH7|)Z<#(7QRAiop{Y!WE%R&ic*1~Tz`=#b zcY7kz;kD&2Cj;~`S2xyKI^o$2yIS}gf9#a=Q9)$@hO6>fM@fHHIIsHh!-I}!S{7G1 zs$hW6blRz-a<0UiqR`kGzu2ESXhJ^2r47!@0KF(W*w{26X# zt~+#GU*G+@gyg3`W@sGR>*;~ir<01Vnj~)_o|hHpN#@m~2CEHt?P2jHSGx9!Ig-?m zEx3K#6`I~T{Tj;l*rP1`oy&;=zs1tZSFVux>@(+mM)_y+xc>(~lCy95f3X6A^C>}* zW(wF4EUuHj&IM*2b(&o^6yjayOMXIf3%A4)V|65LaY4uZRw&sgGoAVtMlMvvOGBMa zrGr#d`EZwhOJ`wAT-IghT06AyZkyraQbhi-AtjM`Ys}f~!*?f;jwJ`qt{fv?@xUT_ z=ZFstD>Xl4a<@7nt>VM-w1908Y2ueQvAUVOc_#vF(5tvV&DN@Dcx9=9%I)Hj=9~Q<2(gdxmghCk2GLnvEb% zZ-`#5X^sU)*17(k=Lj?UM9}dPUl`ZLrfr-eoR+3Wl}C37cg9p=^8mvbAC-sBUQMzj z12ZzkNeQm#QQc!|xq*iKr!|VI7oE`K8T@0-aTC0v`Ds&1EkM_tr&p8X27i|FihK1` z#PX+V^~!kTZguC}`Y~T@yI$UBOT3z!$9~f3!UmAyvy!~=jpVRB&EMMnB>bC2mba&! zXLB0=iywj6Z#`Rqf2+XQvAgBl2Hap1F#br4tjiYOrtmH7u*9FBC?3mL8?@;csP%rM zW6Qwi_=rIAxM1xBEm0rXT-$V`UxtZ|74&{DlJ}R2xY`~}JSUB@)|FStT=N?4eKhOW zzKAUN`SIr-CiuUcR_fhHyo|DovxdX#`|i1#ET{K|GFxQ7;M zdl7#T=N&#HI`IWpDDFI%<4b|X{4*5>B!6f8No~`j_bd#p{8~$mWg%!oc%<(znG^aN z^CGH{iae!1#nbDUc)y?3lb0TV_b;Z~1hf1>b&8uWDon+NYja=p6VG#9Z&YiU6!8eP z2KXM4_QZp;6{{ac6D~vMyXwd5ys*;OgfWp}gR^6*>-nuo8bNDjVnr z?&Km4QQ|A7+1c@^lDY0HncRj~i4U}7D5p}Icp;DX`&TRxq(bmC?Qwaj4P<5dWQ%Fa zNP0F=AsKCk?1$67TbVvkOE`S*6Y+OiT&Bcu5zaMr)O>k=sWJF^62fm?md8VZ<-;|f z>~Z^T!_pU*sVMs3z4Q!49}-zABTlgaI)dBT6Klf;Vv= zj2|p^gX8^>)T3!$s8+vkerf~BdE9(5aU{SWQBHm?w9UltDeU>|8M&WSm`GXuI`53t zhFvTAnC_6C%y(@qv&EtoPfKCTZOGErtFjCyyw%VEm#|`YtUs8$rgxq#pHJ71TM z9ew>`r&km2yrtyyr4R-lm?yuWS@|K?n|n@$4B>;ml`z|M*8;+KR^JMHPeJJRU1q~7 zUdS(IMD`Gm`1_Nr_FJtUc=v|a=J8r{tWu#lRsEQqOZiV6>~Zt5Kep9V(J3{ z!i5@XO#Kx_xL%$w*ALwAgi@ksK;$U#!`m*tltJ^tStG4QYn|z+onA?sSV8zG5|?t6 zCkPihX+L9omH|$O8NHk+BYj;@m$}smKDhMF?a~#JqZ{DvZxQAq_t$L+F-AqYu=DFG ziJGU6ZMi?BhqLT(eAWA3+nhWQbIf6}qyrTT*{n(?WJv!;&s(~6jXUm*(Z!eAx*_)t zhr~z1DJ^Z?Srsxtyd9^kEZ4ct_9y;{FWK3bK3jqR@e0U@sI6?tu|w;*=8&p1CrAs` ziR}1e1<9l`y;e&p_$@e>@yA3Or%FU{#o7^Jd5<W$OSmxYOu`=qg;_?2_TUTEh#a%k@}AFyK7Po=06Kj?s?m+(^xSox>d={UG! z(%Z1GufYm@+Am+tv!x<}*`NH9tV`<>M+1*+b%)REO*2!&#`syy_x#BU9hk?L7awNL z<}3ckFO=DDI9q|)3jBu^m=djSOW@T-_nQHV$WDEXcWwFb<){=~(#0S4n}|Rl$oYm6 zrxAq3PBv)jlKDD+kCVACX%LgEWk?cF9VOI$!Tp0SsLdXUs^6%K|L_~l{=;kq{z3)* EA5?3FssI20 diff --git a/gold/min/sphere200/base/quad4newton_tex8_grey_cubic_catmull_rom_lut_lerp/cam0_frame0_field0.fimg b/gold/min/sphere200/base/quad4newton_tex8_grey_cubic_catmull_rom_lut_lerp/cam0_frame0_field0.fimg index c155469d577921d610a115e2cd01815db5a1181a..0733d159230baa47fc06a7592697041d093d516e 100644 GIT binary patch literal 128015 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 literal 128015 zcmeFac{tQz`}Z%Tva|}7>`{?@C*Jmb-v)!(jF~aYRw-I2?MaGCrP8L5LZzr^5v3AY zq9`GRHbp8u*YBU_pXZO~`F+3l{oQVkqvPl(GxPbp=bCHI>pai*>$G=ra}d=r)K<{Z zCVxZ)CVwUs_zzTIxP^ZzWw#Mr!?(W@F$lm&(JmgB>xDx1Uso%deR1;n(7_R(5Ug)s z8E&+f4au)BM!%K$LRPz@dro*Dye(XY4R3ivQ{U9)$;J@;2VVN*OHC>;sldOe0?`cz zX4w=wq13~^FT%wi*HaH@&#yp=vua!34+2Y5(&mSsH~3()oJj8&>zKGniUNd<`+-f>(gMY z``&6`T?n+BULJCL?vFPaiaLM1*eD)gZP%kPa76T2SRsWD*-mGz=_k3^92F|E$&Z0e z?(14M#5uyoQLLl$DDW@(c1_;)qym!){68o#J`v`-E}k=_O}a~eh-9_ql0IgkT>!k?zqS3rNCY#^FaGeCg#64(CP|}fTT(5qQ}7u zO#gA|u4zp$XiB^;4^|N5n$1t#?hk?fFZ(qqd@2m8+*V#w_Cmu!<*j=jg~2g=tD%=2 z6O4B4f|UrtXF?>{VZKPPK=IJ2q2H+%|h5Sn-O`sstmrY1Iq4zVwB7hE(+Z zS4Q}MkY@5%CKZ@e;D49`b#K3M7hep3yG6t3Da#0qC^l*&TL$B}gv;NbzBJ7K(qE*z zgNC=J*Omm7QSq1kdULI_KTc$ny*~ZZ6I;)eAB@Wi!}YqByvBMK$`ZAw?mrO$Yr50R z=MLeRtKHwoo6o}Kwy-((qB!t;^rC#T2_MJ97A+{v<03G00sGAJV2CVStXsCx45M2` zcPp+j$L{-Yf;_i{fIQe z$~r?Y=$0(esxIZj>BLiB_`7f@oLH*0r!W-NZ(3EB93AgyW0fbVma9-)Um*k-)Gb?SQ;D3wyuz2AA^ZU3ri(HGs3(P7ZDe4iCh*GNoIn_JlD2Iwu|!0ImFBa@!I6&}XZ71yvm(&8e!5mB z)ejW6Y<{?(A!OI@^c3URU~J=!tcWBAD)#3o{t$^keM6=V(&!juONy)K(xLmyr|Qi~ z8ovK%;q<7PVW%F$HPw=eBk$i`Z`I^ud7MPH-+2ZO9*f;IgY4&;4>NV1_D~>{`@<}~ zfsLe8fnNq!nUJTdf2M4pfTt)UwJX>KNo#=*ey>z5+7m~^ z*2@)*Zx#d~E#uin^+qaU#GVJoCNs%-a@;M|h~&*uYMVEAIYOOv>u^O18~fLq-MjNT z3Wl4md0l!Jf$Ma6BZJQY=yN@_ZfK4h$~rel3)=ai<@(n5wD&Z~sUNqz+e=5nT+POF zWdA8CndDtVRgtx@Imhp`w-uqevw z9xMul#%8mDvD;h(6n@zC@pcrR-;ZD7Jm^i)_(6C@ zYjl(k8>i@>?bq;lcotRZ>GqTgM#2Zx86hr^W7YS@F&G#gsY)ro&B61bj3G7uV5I$R z`}zKbGgS2EdsG>OLOZ|Jq38k+L0KO(W$d{aEd2W7%n=$kq}^}!KE%X?{gF1?EFQR< zPU){MWMTH+g@QxNgHUkv-Dg>QDtI2-gs*ydLC_$5W6nBrl(!(c@}VOBM=q|(o0?SM zznB8UC;Ihl*aj#&woRaG6%WFS2If=R8IaWZV#(VTfe9b;KsP26q1kJnW(Y8FpT66{ zfEA40&Fec-?s=ktlQB=xEdW{SLxriQLJ;=Igj2%cq2B5J>fQfe{CE4o2F0DB5RR|h z5oa3)%aLhuvW%h4d*4R)Ne{BkH7 z*89C@czGiB*WzVo>Rr)lId{i)lBd+%R$umde-wrqAIk}!i$eBInN9}>4s>U{No_dG zM3<{aqx20HQt~t=qO_?B>i`cWg{uf4q2}AP={b*IuAW zFtGRW$=A!3{V~>=gYTPw=)sJFgK-8Bo~rxGmt~H=3-4o|IOd7}V#{UnawZk{Z>_+Fo1UJ`osN+C z)HrOm%nH}{oU)etMaS6H8Fp^nRLG}FUb0FHgU3DPmi_vUnAmE&$UoE--sir?A1Y+y zb

kzI-Msi&cNztunyNd&=)NWLSa{R3G4Tj*dim!5Es2yZg0<~hGWAU$Bu*tH0-_*d%$0j4U6rI1XSW9 zArWEsVE7Fm_Oi>)U2Nk+S9|@``y>t&+LU)SVG#!-Y8KybWH2G5yEgul3l;XgkyGO9 zJn(&ApV)mF8!UWN>AqUU3UF4sEUM~>=gyIFn_NOrv*O)rQ(6QXi>GxZm(%g>>K@g0 zEpyPE^PWybX+ZGAx5Rxn9Km2MZ`Ux7fLN;SwseIEbR@*CUF1o{?x5<+dv@BRrE?|Y z?F~a<(c!Pq@7()_iz}($0(?(KqUVf7>*yCgC{Y_f z$=5`pze41=a~TIpaoY^HmveA%!FBzeMUhCWh;e23vr%^Cwo3E-Q0zLPVz8;!8UL*p z-{i$lD)67AfT2i=^1j8+_`S>E{?e=f%;J6cHCi2jkEbMmJ|y*6g}^ORVR9@;9{(LJ z@S6&ukR0gR(|e(Gwy;?$+{U|PWhn5 zw`gB#ei-JbtU1TJ!vUv6BFIBI5`z-Dj{?Q{s2`Zwb8dAc1f<@+zgy3N_F`&*csK*k zerrFJN_K#bTc3iCo(|-HG+F73QZP2-cA|N71oG>)o|a4thmeY%=IV0{{C?B1U=N#x zZ)+?EJ(ajPzp~m(oz#2ma?Y-Zna{+H*XD7q31LuKZZ%pbAC9p?$7I!DHZJ@Oa&kBw zg6A!fb2lt^!OJg(?RK+$psn|Zlc67qFCW{#3PuEx^SQ5U;stBG9OI`jg#kz9pSf#J z(D0-=B(K+>jy;EFJyi9fVEd2grH^a_5xQ;WX{GJD_)l6!lP^1|z<&z`X0?swN`7|2 zol98-j8Z0e^MW=FSaHxW`tD)B3mZj$yrhTv84$X-@mu%9C`4ziQFK)1ffDji)qWxv zBL=0NzZQDqR+q=_sgD@&e?gxit`vn%+KvZv7m&IFYevb@8gF#(0a}2nL3+^wt>yhM7~hL7f&oawIdK467-7w z3n+*`TQKwZ8wVH%$5|DwGQr%HW6UfMJ2c&pDI1NYBE|RoA6Wqow#(3yXE|}eYkT-( z!5$u#Js9_!I7-f$?c2}EE%t>^GyPGRWGE;P0{izpWurrWU*HTIE`}Xq{hEw<2p#g< zH?SlEN~@<&S$M}4ntR{Z7P{#`%R;kACBgtS`#tFs0uJczvf1c;GZabo6@h`xbfCG_ z*Ghni$MQ8)RX!c(-D1kxEa_Mq+Lq<5NWLGg&fTcRpki>w&fhhU++g{t!#1$m9hznW z%s0c%C^l3-D@NjQ)}eOy@wmd!~?3g8@S@X#bTVi$VmnM$qHl_oF7+| zvj@vy{%c1D6Ls%Py*J2`z759c6}77j96x(8TYoVPmw)>YTWqvO?wo7d-WNmg^+VGB zc2aLJT;8I%`L!qNmfL?g{mBHoRjDPcd|TL8A8!0sLHg{nODYwqc8D+TXgwq9gLss%wWr$wz18w3#*JFNE9OKg>YAs+G-t2|lX&(={__JXqYg7bKk(i3(52 z^%-{}VI?u&(~iS}xx1tF)U~0IYV^-}n@53yjOgIy;Q*NC8jM7qq(CMIUv?D+LjT*z z?%{qW1WcSwD>F!6-#&4*ZLBD~*|FfsvUWCj5&@+J*8@nuVb*}-6)zaQ8b8>6-VZt1 zYwq0}al@VI(y@nT8A4?HpWnTnRydW^sk?i6D7MTj(@vxCAl13~O2=m|(h~hfs+EJ_ zXnNpd&SP`@NEmyQwcQw>j|u4}eKo=Q57o}vq<^qjHPA4}iG|vCiaiU&g)IoSHfK!sBGzYs~jANpYr~`1%amMP!TmeR%U~Ya+YP~1s2371b%hK zMB&@HM@$)cKCIsgeV%`rhnk4tT{=TN98EA!%>5RKEuY?tOV6g^TSZIC-ZUmk8wOgo z{PxG9yndzS+uZO^US5+=KdHcfNd=m6_J6%NI}o3FOA0INeV}pkZ%+MES147Qw8Yd> zadu|GE^p$4XxXC8i}dzIW512X*+3)AW8AVbSQCnv>O}?O!F>FZ3vF8%PRC}?h#|On zK|#W{m_AN}?bT4;H`4FY*j3#gbDfLo%GV3bo=2kQdKPO~)E^6bzcj3_u|xIDq4CVW z5zs}C)%$!72IPiT`M>r>+{s(CY(W=n9}pFFG$#9tw(s=6VSMH9box2sj!b^EbfB-`1lAp{P z-e>>#G7VY#DwlmD^>4mqM6>LBJ~&4LfBz=^EGaQ_oPWhIAwoTMRn$2Y>7oT+(R-TI``3TvAnO|~h zyzA^dCG?(y@!7?1Q$NrVN7b5T(HM%Qw}*C|edUF`ED5!bryNidc{pv!6&vWxHsm(4 z9k6u8;c9NBH#Rw4|Jvcef|Bm5H1@ej2!AYk?=H#56j@(p-5dsTeRiGo*VD%EO9@Ky zF>Aa@eyrdg<&43DJ5U}*@(36C7pXCRB%k3jPx%}N=U=#u`xeo#OC*^Wb%hJFr@HDZ zeg@(nzThUGa8iN)0t)c{vL%0r=wq0BYUAiMa?T9yy$a%oNd2?#M}nIVeofz)|GksM z4Ifi?D#nIm%i~RlXSJH*w?d_BYONWBeymreFLQ*8$?bUtPgY`4s@Jr#G8Ur6wr@;x z3&Y>c>Rf3>Gcs#koPtc$3@+%kzxRLrD! z*q%0wf<>$HnFDiH!TZHL;oWywIDJ}X&Yk#`7^Pf@U#PGWO8fJdbzNn`VNSA@cybhi zcIcUR$FsmoiYzxK{WCU4bvxfbvVqpJc^)!qOe8%L8W$pU<(~&1C4SKghuXRyS`<5P zWP2!@s3?2G^hL_)JM3T_PO#11ZS4wM{un2C;Mmq3w&fJFX11cfb*_O&p+;(sM{U!ZlM7k zt91l-HM!7m|NR&BLcaiLxwQZMdc+g1&$w;oIelGng z5J$zjpWe-*;mvsgC)+|UzLp%?Iya7jEC>Giou-~Jtao~9IueGn9>J_;8y?2DJbAXi zmV@-~@!6Kg$hnwtEZw3s1X)JY+FYU zQO}s@Is5YHgXwIP_JqD{jAVjc=aWGV41;IJDuJTcVc0UCM&GcCj{EOco6i2oz~?Tz zN7Bg*6qmlA)tt&kb%(?$(eoU93{*0#8wy8bp>mDlH4YwIsH{`}#m14I&EqFsgFyfI zs!INz3*vNR3ZMDdV7;JO&y_51=vypXGkYZym)^RZWkm3?bZpfPt^O!brF?BpFe34_ zPweoBB@3@#o{*cMGO<#o2`KA?I0{mm&&$d1mfIohsPY@ z03`JEP^5Lj@DEsmlTR_Jz<-(o1=iH=4}|9=>@ZaBGvDEv`;dIX-m+T9!J6@Z0;&**aIR%q(}RQRad3sEt_uRRag zprU*K&)IW~@oq8K*S6mgv;m0|9|#xathM*4qzkriz5mLlew*!k!*u*~ z;4J|zX1pC4E8ph`$t24qDOc6;S^dYr!y-$F=}ujn^p}Z`3*!I2Z;678We97_aTY>% z-4-xkYl&XR&nv66bg(Jw_(ij&HgH}S5u9ks!0C|al1Jb8IN72SS!~5etM`FMhte?I zoyYeu^{~XWVT&`HW?N$Wh2X@TBOxe$8s4m&N`vQ_4OfoI`Xl=IEu)WXJW%R(|2p+y z5G-BqiHQobVe4JYJDN)Ky>k%)>Y{wBYb2DXrS z1pg)#|7i<&@`WcA_%|pp@4$0!f#P87Z10sm+UyDX-_jf3ZE1LJ;(Kn6G85WH*$Y0A zI3Ty>n94H)!UbR#JB3At;lcQY$e_nwc z@CC_0+kmGD_V~e70MS^)9_Ig=$^R9)m3& zc(Hp;mtql{Bd{Y(Det8R=8eN8B~HRU|JbAm{D&or}G8b5|Q4 zCwVp_*CkzIF6gb{XDSU7|Hz7$es=!hSnJ{MyqeTYOAb^-q+9!-nMY;Ua>8LB6TfqQ z0Usk}f7>snM!=@|p}b2&I2fwVRpO-)$o_s*l}Y@0*)CKYTDl27zs~HF+iZqqu#&QN z@&s1PXEtOw!M0-ks-ljS7}(aeW5q0In1%@Ct)0n+$l&2=h$V5fY~L4Z3>$K@K0kl! z#RVnjki~;?Pkgu_m!xnm1Qy@Lo)^81LX()ZzUy2DjOJ+r&BWR zrJ*(4TODfcC?1ef(Caa1pks%lM#Q->D%8UBAAXbbgCNJLcBiKYB6x#UtaB_p-d7;h zNY44U4_&&zo$CVX%-b{fZkgmU{2M-!lMne1P(ZF*P+qIW73f(SJ7F6HFE_W=hkI#| ziq3zgZpTA#l4n`EC?9p^$pYs~!XUS<;&r>VHeA1@pAD8WhG+U0{qOIcFgrk1%aL$X zWY=H#?srxf*ZVj4v3smgY=7FpIoBTEf4A7vsrFd!y=!HBRR~1y_Z%paAn{`8m$R-J z5%A6YbH1oQ41F7Jy}%DP?rm=!P7R8}y5O0eu}T~)Ja^6g-X;phBaYY@XmcPSsc=(K zZx!K7Et5>`WkXP3FQ7ES2A+L8l%y8~qpk1Y-HI(dyuE$&=_$gc$_i|9Z;_6I%FBo5 z9irsE9@?6xUkXCReKAj#fC(fniWJ7j)A8Bw*^4EIqM+8m+MAik#azq3M^_vRg29YM z<;^}$kUK>!$tZWk*24Faf4^E`d|{=9z&;w%M1}aD-t%zQXCz8Rd=(B|^4%FOM(Vq3 zV@{;=^dPhNc>Bz7YnT=4z{Cfih%aP7er@?T$w)jKdNcj-HwQRY_PmL_PsL{+jcQrz zNXQHRI$6SS!R5x0_=*fKTx-?;^i6{Ui-euL=9|9Ie?0i}*lBNQ9Gdg1{*5^*=DUAa zG&F#eZb|ELaZEH zow*xiLjGiUBf`ElcUhJn^c{@)>q!6FMceqf(k_uWd+u%FchWCr-u-1n+BXE_;|+2x zGNiuS*}OLGB^TnU*L3p_@~~+Bo|n6`_)y=oyq!BE5D$))k17~|Y7@t-f=s!ew z&stI{kNYCQy#4&IS}~3InvM1kuGWP@Zua{rv%C@8{90etG7>feZTIJQhT^eV$;FMc zfS8}w0n?)>sHp$VZFshj5vk`-TUg)VW#$X}PxL#l zr|Jc&wG3RifNc^ByRapx0AeY_6KfK--7bhH+y0ip>dfnFM z207n@FJf-_AOdwuMcootc*3?t`QcZN-MRAhwn+G`biWdw$i%Hm1e`hS z0M!k9)Ru3hgXQ5NNX?Ca$c0-Q44zY9{?YYqL}&m)%pO~gk$A&v$lbTWn2oyg*5-c` z9WYRzl~6>n1FQWYjkPooZo**?DkP}boEUAaveuOJLl3rId#jB-vp$;_ka)v-(Vr); zw758X$Ah`q!vQIc#YOtEM%Z;^d%kR-6S5XoT%er@N6&=q?L(R@RE&L?LQ60PyFg|U z)g%<*_VITPA0+;edd5^INe2F`3_7#Q(hjr39={A&#ztye#n(fNS78bN({XWWHX3^a zJ?US7n$tFy*GT%KUH7U>v^gC)ddu>%2*2>}4%XDl6^5vb|02Z9V&Xy2op&GKM*)%! z3aRN4NH<%&#VH=JPjSlH)DQ?6+RDcZ=0-vBSJADxGq`wAySezjwhz|MGy1BgXNFzT z={)X1D;yV}_U*+46`pmO)f=2ycy8LexH!ZVYhEmEQHT!5^)A^{C!2Z5^Sp84HroR; z9M=rIH!?y@sO8O{_2H;!Srz(+PJ^0UZ(df94~*MYrY|7(6Yf;^=OfJ%9o>$Ucee?T zb;*)7mvs2(5VChs?g)a4<)T$hcf-LPRBj=)dN|EfYF#fF4pC0#k2g^~h|g8nouWy& zi^uP5O^Ap@+l}h+Tf|?iY-eh=-~bKFHp_>wYS|Flu%&jy+a3SJB|iDolM4JF3bai0 zm77R<1KmHW%Fcu!MTE|}Y)65A(3G|tR)Me?g5p#i3MOvb>&`su4U3YzXTqf3Drw3T zA0c_}g0p!V_cZBP__mvJ>@XAYHIMXfM0ld+`IN1`gdOit+lSueZ)S;7VTY$gNKv zV7Ci04?g3LQSG{^q`JWj;0CVAQ(R0aA%B%zdD7U zW2B$5PJB`I0u#cINnza#x*UN+pM1{kBK?oPFL&D4NRzovCV|gxoaW(_Q@wDK7!Myx zbGFST?`y@#{+`Gn9%5akq7APw(eRvpdZa;*#HWLS2QK;I)Y!gpR;n$$r-b)M%Q5jq zHfQ*nbvWV<>#TdG;DD{lU%N6FF=6{VcJ~ElI37eE%sjXx3^L`fm(C!Z*Z*UIPX5EB z0{;XBDnBx$N2A>kbbXuMk2X>lReM;cxgr2V>n`p&JfHAFj=XTLCw}_XX>n_^zT4x- z<8Hq@Ni3+|e*1l3t3L!yc62ZQ>4Dbe6t&aWNj!7q@S#N{4*BZ7;ey7P0i1%WPd1u| zBKP3Iw=BXjkt-|^bb984BYT%~-_>y;aBX1kP2FJBbl5$a@bko}nygmWd*Qg%{Ie*| zorQewDeMd6c_qJU-I_!5LTKhEKVQN*pv=^pl2{#%^Sz3X{(kd7oa~L^ToEb~5|RZ% zU-032x^cg zbEn^rf?_r_kNGd1x`OmkF5T;SX}&Lhx2fxFRXcWL=<0S_~F?;uaYk$eqQv(ZKZ7)@l}^OFYcb;p;PmNfR20==0|MXlp`I9H8=0a z%lD8v#oXyn-1I#`ReKYB$DR)wMVGGI6O21cER;7cb^`6%Lp859F7|twb>s+#A*!j@ zy zz4u^Qxi=lAJg(-0Mfwo-uIR}uu_gZ90_*AyQYV!f{+Z)L$Ft)eeD!^P;8@6r8ZTxN zp31L_Hj%zaN}A7X-DiXO9)+ijW^kaP`*Fzd8Hs=Qw_aOJ=7l`cj8O|R_92{xf#G}; z5~tm(&C$4Ri-nxUxrrW(@5?jSgeM20e4O)Cv@H@Ln~w@kZ}G-9 zlTph;=?F+nJ)g9&!VTV5K6j65aZqkwtMY@q|C|5x@K>Dng=3+o?Aim%@xK@98xs8ghxD+K1LBgHtNEK)ur{l3v=&YSSgj=$h|6Gc2iS-smU-|QvkHpi; zJ@U7Gv5HfyZ~ZM4mHA$uj_R@zZ8E?e)2p_?^_ey-#9%~G)`&K%4 zZa7TT3SRCY=kAg7szIX5$lS_6;nz3G9He>r`B^(Ohk2>1d)x?LfWbAaq65{*lzVbd%HjL~i zRi4eS*%(qP8aztwzbU>`*XM#4>BC!6Si72oL(c|wJ}8fXg6ztD51N5;fhCLM8D7|U zHs-d;3c~R-o^#v(OcZL~@M-BQd1!B5zVbfdI=tNYeZX)d7uG)Y{QN)W@HAOs`bgOw z=f&I>TG;YnKu_q}na07e*{BHJ!yVd*o4+kBVPaWwz^}6rET|cU`(Kf9#*^fgQ$4n? zz|}@gnz*Y!vO|iWB$}~s!@2BaxE~XrY+lc%%0-d9J3Zk$7iRYyLLZ6=7YGTU`Z%AsFE-{U?ZvAmM10CJq%3KIYTKNS*oR)1On@ zE|9q_nd>uJITXlk_e)HZ_Qhek4*$TT@+Yns(CP9==EaXUsoI%Dr(!emx`}DW-x_%!=QP~Aph!l zOMEV?_1Bi-VcUj_yV8cZpazt`+VR;5$3qQGbr#LcUSla7< zJ=n+wStbi3ZT4_L{ndX}f;b411nAENS8e{cZlUu=G4>sK9$oIiG> zrJJI#O|_aa+!=-Xa#u!;IvdnT?|rkS8BmQ?Pe{H?@&TVl?PnP&*U+)B|q5VTo(JU{9xG^^;4D`?6>n^L``s%7b5PyNw`YlUIo_$mBR*^3s38#Lf$TO_P z9`{~XKK+&#i3uCW4nECjO$~wn!eHKdQlH3vxjOLMc?)=lWJW$J_CTdjYofqsHZ;Wh`RWng2rw(@ zR3dfh0r|T|f7B>Ao_(ai{s0%(ON}SKka;B9@$sjUcKRVGT;B+qt(7NI$Uf0gsoMb4U@LzaThIR7`xeJR;@WUDR*w+V;hW+3H7av24KMuM5zp?oOP7WEC) zkv!z|tt|Ezby(13;tRt)@VER>qVD|&ET;vIb!=xsZsm<}+7R*kd2V05btey+{XMtq z(!)`DYMX=AEIQ1OrvIb|_+fTJ)lhqhF4(*|wnbN*AoHsA*YPAClE?aMgdJ)4?YQF6 zyC4=6M?|CxO2~YHJ-XXMR~f+}NhjTUt|6!)S>{>uBcO7~+bWjyqwn&2{i<%1j@R9@ zqDM%6P<7d5z3+r8L%n;mz`BX#Qzm~V75H~3@G2vO?wuNhykLtFw%k36%MxD$VeiJP?-J!O&KO-{9SOEY%kbQXH_|O&I3j7k zk-~vtdGznwY%&+_uY$^42|AqnjccUO24Mev-}O@W_?Y(l?-ZkA9`5^WnJ1l1c&1vm zpYCv@V49?w{HKP6zb3Sn9y$f*)#wM?wzFXT#iKky+6fl}7LPv*cZS=yODX$^kN4+Q zN1G4J2(Q7cR_h4W2f9xJ3+|YPTMbNt}E(+LEjA z(hi%Z9(p}5h2%TV^=I;b1;eT2li6y*wJ^25S)I9#0oqkx&1?GuVQ3m|yZ)^sA|43V z$ltNT@)3!3MebyNUBx$NWey!a#f#hi-txe|<0CNn(0@S%272?eK8S?j&#HEn6Ja5+ z8<1HutHKL6XMOTc`4R~(t9jbycZAcFup-CJF&LKwZiJp1biihB;b*3cSV&Wj7Bq!>-QaB$=yN`s`ry{`XAuE_!SyF-+#}`Yv3k zT+fI8^jmscg((oO7d*Oc0}yvX)?aNY;nU0OKbBM=d9f+G>kFj4vGdv9zq>`)*g2;r zn%_KMK5&+oLTsE;daQ z&s-TsL!YVXw2X{Ue6Y6YZ5`wyngJzmdSxT<7?_`(WAGdf7UT1tvmo1kZnLn+$J<-@&@T{k$B@smgV zVF~Hsnr`@^y8hi1ni~d$3eW7^L%6D!Qg8aN@Wr0FGL0K5Y{5K{)V7cC3vxX~!Ze<6 zz&)o`e*J|#u7#(p_v8_ty@)|=!YLl+85@iRJS6>s?7`s;T83!1oe^zD&Z+6+nwRFL z>Otwbx_Ou+6@4l{m19Vq^7j## znSSE3%w8sR^5SG&eutqn-J5z~qdmq19&8gOJR45J*HDWq!D#qZ7!`C zEw|kFQZ0I7%S>nsIlG$$M1Wft*f2!+?c0=JR}N=zkwh{6kmnnSaF?~u-NRWZ+I#Bo zV#2HAy}Oiq$%TPSgR+h%yaFL5F8|OkHxR;V8O1~OQN(xgE-vyO;cG4n=$-x|91Y`< z8LJHr!_4No1)v2yevVv*oIPMa8rZ56Cs8g23NOCbxC1t-+sTB?!=zFtX%npV-v?TWu z>}SQvHW_D6BZRf(-N0@JWcN;67d?xQ`*CkosxG+`Ue&H6tP>8HUR_a8RkfZ#?RN@Ym&op<-6Y! z6=OSypWUq~HPj-mR2`A_EeOI*allsVunq${;9FeD-ZaSjPfcbj)))2C(rmMtnQ2H`PmwU;1OineZa}H$1$aV?jw|d*SYuT#K!i z6uelw`$=PKBwQt`zxxdGu+ZURW>gcIf7hb9=NO5P-yS^M+Iv12-JJON%YJNZq(_cC zFY`fH%<_Rn8v+sS@31-NU=ZGk=$}8g3R(;-9~z zp#j^8Z|SD&h|qKeO|4EYAgt zTlVeoA^opK*HN5L=E-j9P##+WJ4CG?Yy8np@x) zK*osi$W$MY5FT09Vnm18lxBfY;y=)HE$X{1Yzz^_-4WIXee5QED&HLqxOJf;}Ku17M46)WM_$ii`1)s6p{ z;Lq;-&q8F*kLdV{J?&Q`U~Ku`QR_Vg1@1RWf|a~+JfOOtI?lu<_v|0vElK~|yUS+# z6~dv}6zHv^PB=DKxL;S2>sTsg_f+C1>F0Bq^ZXjAfA$X;ZF9I3jO|l2=428o^@WV5 zH+RmrLCW;Lwz;FW5d75;tU?V&N1>&$$R8@MA>H3$)Dt0wHT{XUKd$csF=~K^2p|^EjFJORTnX~hSGN*y|gKz zU}S9n{o(){1!Y1PN3y+;zN>|D>yAHMUnT40JoQ7@-HR2!I<+8{<1a|JXF#*Y)9f@S z0@8OvkICHwbXt8?SL`MA-srKt%S?%Hd4>qr=nYv{-T6QK`zgrYX>U_+;*G=>mcn)8 z2&h}^V(y9xh3_;ERp($6Smb`660?@{H*sbs84}*atbJO>-R%K*d^&t*z7m6cUtM#H z&kx4G(r0<{UjP3qpd;qL&?LqiUu8>oFaFEL;`<@_Q(js@&sOoo{Yw_`nDxPGBryWw z+&SfO!%oP~fAH(%dGh(s+ECZ`ApqO<)p-b=cZKH@yI|WS5+6LVZu`2=2(sFT^1n2> zgS%(HpDKk9jcrzQ?MZ&VE^SXijuZ`-l9G?<-6wpzN7^;jiv#gx%^9`beq`>)$g18S zGAw9Hj0qTAbU@6$n}rLxc5q(wd3A*gsXvsR)Gyf2MOS)q>#2Tnp57}ExP{CSueqIW zueBl^6O_an>G`@~=7`tdVTNI_#PIhFfhe4K%6@21^5(}+YO0@n!NC+IFHg#iC`?!K z2%tNLzeU`W)TS2VtM=-;I`h_bQqPXm80{S(JcMh zN{kDn;+yYCjI%I5&Fr`WIj<+)a4-K~?7e3^mw)*8kCvUS5RyXn-W>Mcd#?{4K4wHl zS(S`XGLw-MNrRLxtFLfK&R#nyEX;bSMvRQkhL-tOs@qz+A@WR z`15%j0!Fa3$-^qzY6{<9@QFU(Ee9E;1Ba$=TSAEEtBP2>KK=E3oI@{3ps12KCpzd1 zr_-dQ4qp}qZB;hrBc6J|qwn$kx19y}=j{E#>Y@pE)?9RSWh@};>raXtMm(QCi(3A& zlLW?({O^3&>jmXk?Zb^~e1Wi+w=k|!>AyPo|GzZ+E52hpd~wT}&kC%Yh}S12JwWWq zbMvrWHt1t_tS+x{hfmj@>9AjSg@r*4+L&xD$nxz_{BqIx@HZjDb#gwg#mC$tM~2;y+AO%XLiybdB8PpIoiLR z)q(qD(2n<)Y~ZK>cV#Ov5IX<#U?+lkv_<8Ie;*eG5^po5S%@hdmaxbv#lB>M#Iio| z*$*nLf7#cMdcpZOcLqAwP!F-OQ=KUVb2V&=C9Hp#!K5PV75fH1uxk}4=y{F)5zW6L zM+#M8QLB;cWt=8R_dc+yYw!T^a%Kq~JtHv8o;`K4UK?nMQoHMM4zH`j*H_R)0;R_c zHm?%>Ao?!NfE(ujI4gwhKNV*KqLu-#L%vbuVAjlkqysqfO8buj{Zcr1O->hJ)1rz+HM5#WU zXWH){5uPSNlI>l8k4SIKN!lWW`v*Wmkj44DL3`-fj?aHXK%KOn(LNdy`f+KZXBXBT zp>HYT&I_;v>SXD_CUy_7H$E}#;EfzalXK-fu7=PQ#Py^O^Vn64JP*=p1VSxem)0=B z1*+elSC3A!0-p$@uO#FXiui;|@;tGInglJ{t9JH~y|+Z%1bvL9HKV4~^j=VDEK%3Z zAP*JKek%_vSwZcMBOV1wL`b%G=o+CSLi59kp?ldLz~5DIYJV&88;*08$N5^oBa!3T zsXtBOUai;qq0gpJJRO?MJz)Viv~?O+bRD74OlZ{q8S>3$mchFTb&n6q@3SM9k-f`8 zF(K9$m_zI|NnY0f)xUp5HT!?R$d<=6@?SpE!lq|rhSV)vc+qy=hGbz5PURHv74>s0 zpU>GJwIxC>)ws-_7rO9umUZhcof}xlzcr@!AOInq@T`Ky1f)ts4SbkL5b(SDa{!*7 zx0;@I-M!@iUc!}ZaaRl=F+42jfA$p`YuV~=JN<#MulIq_m?4OWr;}Mfm4>sg2Whw) zz2QnX_tXq|AY5r|m%L$*zTJf+Ycvz0dN5!A><0@HLV19YVg~{%;mG$h#k+ zGhz;uK`!5(&9p5~A`}P3^k$@cfTj7GuzI@(XxKe|dR0di{0)7AC6N0nBVJ=jV}w45 z4Q915^pDhrOx_jUi@p{r9i#YU+`o@;)ue17k1Hkl^x}0tuuiaf{bxQ98vNZyr7)-X zj>wOw!Xk!|ze8G^u$w~E>x_3Gyp*3M>x%ELL)n+Y_Tz7WlIiZO7vKRDbi;LSbc3lwr& zrzP>dXTm>pQ+&k;PPFXU{V*^9&fGXt@OVTI$dt}dj|Nh@g!@uGyTU^5osc?>C&wuJl(+4x4Z%P|+LBCXZ&g0GVu>oKe(Bbtz zKCsQciZkzTqQ3Q@gGepvD}-F~cU(h0=73h^L%K{NoKl~aZjSSVK{2Jv8_Yq_!!~Z+ zf%9}7$HON!_e;Ql3zN(cauIq|5*jbI{Ldcn(@f^5IRsuct7zHn4qR@xXOag9kSKif zQS}Kc@ML!Vu+r}if{MNev??$^%va&uODbUfPU3t`8!b(L{_bJZt|mFv@p5JHv;?5+sD1+7jR#E zxJP9^8+~Hby2VdsN#HD6rn;8}^K)CMd7SQ%V86<@cEw2-*eCOQ+1W)8+ej8!SL}O<`55RM@plw zFEFsO_cP|6Brq&|-p7Lewffp0QkaY4$a?E=8Lv4kj93l4LZ3yso87X~5v+Upe3!1_ zd%-cggJD@)5B{o;NVWWO0s8VYT1FS#Ao`ZVk1L6G&>S5bxW~m0w0RxxhHa?82gfUc z`_mlYlG~A(NbDms42Q$!tc`%VWFcl0zn@{5l$GsFgsSAdsvmiDK$q%Jws5owR4%Li zJ;vt;Q#C&Nf9rj~wsLj1^q2ztz04OiFXI3+4XP9CSNvdW*QM@X8V2ytnY%?z#|}F8 z!Y?vve{wQ2YKQ+{(=jM)prwt{m_L$+IP@!b=)(;a0t2**7a# z4h{F67AApY%kCN3XGA#ToVHJfLl&NDg?5hbbB4C;M$+L}{efDx;dlH8xj zHRNu#>CCZ%_smIwR(`L-9GeLz;3 zf4zIa81(i=Or6_Bf_zt@oWDOT;o<4PYXhAAV7cD2n0SbYoVyE$C#|g^Q99#|8tPlz z{g+c?(BD)fbLWOVa^?5f3p4afTf?-OqzKEc0Prkfb)Ea}4+%;ya$gE!{zhul7Smg8 zFrp74c1wxk7)d)>T?;vP$DC(49wBGME`a{ZfC^~&rg&_x+rc<#OPKQy`WFfYhP<=` zq55L&WczMcIPogHD$1PzrDr%N`jhk|L)QZ zoIiRM+-tw50c}RlLPH{SAoPn?;-QxSljb*S-;q1RY_F7z26X^jezovm1O2L%Od%vj zIm|)p(k7B$BSNTI_FG3`FW_H4`-cCqEf{u(odYLdP}n1{zAT4&IM(fS#X&pxye-w+ z{l^r1?)0ad^2-3fW#)Fd4(i^jhxaO@Pndz7tBINxdH>hnCkMYL0JjLe6K5B4X+E;i zaAN+*?}!5m-ipQ$c|DoqDf(ODiDS#$3y^(g2!xIaFKGPvJn4j@-JX1;%RC zZjWS8UvgzHr}SIo_#LZWT@e6q`*zE6RTTLvp{!h-S8-o*?sAz;oINnm2*%xAkOpqY zhYZU!P9T!ysH58JgL|)v1RiP|XsLY_%Z&3*t)3GV!&?C$H!0Ha=J1+dY0vB>fR9^l68WL%8)iJrd1*`*bi_%QZF@DLwKGffCAAuu z|FK=%p=1P~C_{9wXCC`f8rig zV*MVzUJ+Ao^I!e@zn6x8#aD!nNB1YW*@JW1=&}9CabrCsC&cUI2KqBmO55p{5WL&U z`G~w4;5L=>J{9WfL>oH~nQOu&^Gk=`nFc^P@fL3(e*P4nmrYs3O2eH`Y}SZpwzzbPV`^(R?dDL)+Ru!Qy5Y6y9(?P+v_)Yg^2o>(dcIM z-O9AYJ)rmiaQvf9#|)h(B$j-8UH#A%G@s=>;8N0surDFPOFjnR{5-G1=%oixa_so4 zTta}o%)=hn!<6CO>8p_(kMMlkAajy(uRR>BA-GmKX~8~$MQe^4(6$F-Fd{_s11xqm!~7SGT7ZF1|b{5ho1O%h6}7p)U9^V)hFu)mC#+#7Z}^(P zt^lx%7~J+6bcKpizpKyJlwjUbk8<4(b2Cp3i_1;p9%u9YC2-dQ%WR3@U`fz zwZAXUBWuPyVlj8GZSia5{%H@O5elRT4%P$GwLG(87b2L6f1|pK^?2}OO8f_EA1J0~ z{&qkK-)DzY9=ySPtpdaS36J_L|Eq)liYoVizR2{#wT6*!)Kz?ABI)lZz%#Mpp>mvO zP3(PdB0OXWf19;3uA#4e@*v0eP4t6y_8QS?Q5(bjCC7Fv-ZF;59n z>JY`}djENvHaPtpF3F|FJa5*}BMe6{&oL$4@`(%XQ@`;v`@OY*g`I6O5kK^x%zW{9 z#W~EEcwo5n`LjKEqdTsXO7lH8i{F#pnA6xEGyFtXj78gl9D;hxL%p{F?7Vjsdq6JR$Wl z)qXVx|B=#s1>}UKiqATigc5+?Tv7ejQ3c2?;4v*`vxd4f->N^~JPU3xX!e+RBjwL^wZ{73=p0_g$sC?}^wUF+bO!xl zO2DM5cmm*ZE9+0SN2oWjeD3yQN*`WtmWGF(v;wZTPae@Y;Qp!V#IVG)F$g6d^=d}{ zrK(Y6LNseNSCM=XuYtG4fu_46onO zRLA!S-S}bZL2YoA6i7BK@dpywYcK7?_8|B-n$5b#532NCo{8(Ipspv5c)`dE3W`5S z*feUxh2U^kQRGfcUgWczYD69Mh1JK?5>CL-B&c>@9sMkZ-M2r{Vg7lzRCsu9AQ)+c znY`*RQ6Wzeqix&8iy7H@0(-Im(_z*p}$qlL|-WG zu3k#WCBc`mWVWhWA$D|IbJ@*BJV(&+JfJatx7%nQe>AqC_7k zjb9nk5l7#K?t_z7oLaEjEw1-g#S(J7t89J@`oUty24&}7Zm-q z^&cscq|+`++Luw{`6a}5RGzWX{I2+}7s zp1(P)4T}3E#+K_GLFq|cWxK8~1PA*>UmH<{j|E=j!8s%t*6C7T{f?i%EBC)mC#nL; zSmS*Sg$W!h+f{frSQd)-S7^lX{8mxFvimabOPZ=L@T&^z!ySPE7vp$KxL|ty=Z;ez za2%$Y)4Jr~7eUOZc1RhdBxlIw1PDM)mUU5A*dK%+>k9GScZB2N_x3uqX~73VpOLh= z2ON-j{#jxXb1*4?Kd;{70&8z5t|Zp00o%2%*c@u)6?epbSk zIhg`@Dqfr#nX-l@KAlIK5`cVy4&i<1+e$WiA|;$@2MqN-B0Bq!KYdH@C=Dy}2EJzL z$aPr3$~eW%Yf)}+Z)ijECUQ+~i-m6Ic{#whm>rUt;d)TK;r@mJc~5&qjI^`7G{H+; zSa$fQHOx*d4sH>a5B3OiDc^K~A|?5s}{$-epNpYkT2&m^u2>67D6Mf-S=4u)eW; z{um{_tpcfL>^GP+G{7+RvOO)nXNI^_KMOM>zo$Z$Iz}%52s%r4+WuB>xr8`DE^Y;} z<8*-o*r$sWzWzMG>jM%?mbO{Qr&lnyea7${(ab^qSw=sQ~yjS^&P0<(Vt}msR9<_yTZqb94%o5;FdtB=LZF@+H`7)Y= z9O-gFn#`056;Ml_Z=iYN1hnTY*~-wb=j3~8{wL-dQ+;_Ja-UTh`Xb-QC-TWcGgGA7 z5kn7PIc4o&BN+swL>1cDH?H8$amGQ`+!0R18VJ*U@P+%Ha_4p)@CM58H}$L^EI?xR zwj#X?au!tIxqM3Y0_9JoKb7#ke&Jf|Z~b5k_}@Gt|NYiK_zpCN*rdv_xk9q7-f_7` zT^MjpHkL+x{*j}zyz^Os$QQkmt-XF1#&9;!mF#l*0Zti`s>mE_aL=mbAdC|)&@tD`t$}wrchx%?((qx7HvIX$w zWf#S)BCp+WFJa9R`!VuR=cxsEC~ExUY3LJf(32Rz_#-n4J2Ws`;`PZ|-U7pSm z@s-ca{08oAsC?*czgYms=a@&U3=ZHvAk=?sUIUsr~vwHe*Qpt9m>f-$y>mx0TH!O(94ul(*9u&#&Z8 z$AiP|K=ARH604H}@P2*Ju7AY`j`~{~s{TMi+sf41NBvm!WGER)okmVXl_sg z=L=7oFG{$BJ$2b|>TeQ!s{DLCNSFZDZa<3xHt@b`)$LGl!ut{b=0m!yHpHBD5`t&a z|JA>LaIO2_U0UjUwXMkre|UX%$IWngXK=V?wMIGX4ktKwyc8(+hLd|jrANvgKqlAi zLoo6QqQ3r>e{X;s5z)b$HE-OYvq9-2J@VW4#Y{FjiFkl!dIL$t+5)sHluuA4c)(7b zPb*ffsKYxI{cFPj_pCWQ#|0je;A7NsFadpIe&49+y2t#W-GRGV=x6}&@?8~sH{%TZ zU&Wjxi}DBQkrR9+gg^+W3AjyTYX$m0WM8h0tAIpLqw9Or-Dru$j7A&}fLD~)@2K}# zfm}l4>DPwNz@{a9uNrwLj>6817bkH4OjfAqL#YY;o>5EViG~n;yJyc^L1PeWef@I6 zTo=SCl48gLeBsBwH|IVeci85Um2%Cb0X)w)V);tY0_W)2;19@MuA)A$ryKQgB~)`? zRnN%mD<)qxCtmVHf6P^bNnNj2f2Ewr+{TPo|&f}1BO{~T8J1XHJdwegq( zV1BoGv1h{{y6KMBv0J;sX`}q2z-b-$N&f1dJnDL84M(5#o_B@ma3LO78EIHo2KUg}w#VD{FU_3hbz>=;Ftk#&oWn9DUe9X8U8tT?snWUvK?Do#Wr~^7$=x^!GZ5^alu|zJ}2Nx)X4Yuzktz zLw_L54Ru+OA$-xTWY=jiXbfD%vi&+QA&;G4S=;PaCNH$)H7 ze&g^0;fS{;<|!I*qge2Co|g$wQc!Zu>A7G%b9;BiP91)jxScSh@dkIArC$*ne$c8{ zcYX`!wB&UDl;+5X@jVjkr{)xZB;k@yGyp3t`X8O>>L_)%4?Hsy}| zmAu$pk7+$%ct7>~-v?0V`t?RdW4qk|^kyo0Z`RpkJ=HwKXZXCp1YzAO5;lC3AjoGaVk8z&m%`zMl zh<%l1-r!<% z%HJ$P4rZNiDPL4Y4ukVZ`5(SO*e(k33_Iu#7E)H{*<>9-U{cxB8_(?Aj!i1^+^j{4ilj)iJb183OaxwV_l4);fC`suqq*@NG~wAY&(?oc-8R(AZA z9sCKPqK{wo1sk)zaUOnuIM)-;wUa{!xZdO~=KZmNBF;j+U?wj}*LD4}C(r|C9eWHi z(YLJAth}Lj$r7qE);-zCHK1W)eNOF$D!3nEe_*PBeImC4=p842r3Z`}E*;@V-l@`EZFS{)0nqUB z*^oOAp0h#ddMzdTU1I3ZaL{_e(?cBntx3qOi25}VjXsq)brQdkgen}34o@6Mz2|4` zffUV?fsn&i`|0^ldsyIm$iMy52Cj%Nh18?IlYRA5W3V%xKfn39i{t*H^!Z7S_(y@z zMD|YQLc1eOMr{Z;Zg_&xU(KvCd~eLmW3$D%L;OjiS;f5e*Xg#kfaZk6~Ud$kqUMy2HBqr)5EMidyXumlupmNPCezCBWbJ zU*?ylB_LvH{r2-PSx6$CewK2^8Ypf@G3w=d!!g6LMg;~BI3Indp5>x0e7L1pI&H25 zxrsx+UdL*Jn8b31(S`;<4b|_fUfM94tUz@Ar3syu0TV|Q?IHet#L^QtehMN6(3FbgiYru$ z^l`?<`GL?u`h%>PXBimvlQ(gvE&Mhpe79zfeu> z2n8Ds$RG#XqExR<8T)uCAF9MHSqnHjcS>yDSOfY4A4s>H^9A0=$#Qh#7SNKtR=e>? z5<;zuieIQI!v6A@>h=9%&@OzEULLtFT&`WleK=2~rC73C&(Z;>O0wQqBIaPeRhhW` z&KpGUZKjCHqCS#&l5AJA3yA3E{TcT|o~p*r%z&amsG_=P?JjEvt70^V+&i zo@a0{{5a-!M1+qv6ncSi`S-hz54(UYY1L2Yw+nElxD4!B@`LA#4eqw3=mTpkXSkHE z2Qdj*sxN)8uj^10dg0{zK=<^nrzX_d!eGpWdPy`)vrZjY8c+ zoLDFF25VwZ;e70y%9$=9D>~(Mf z`;|Nm2Q3$H&}5!{df5YJ=7N0>l>5Mi-pS17b<|OINVwC+U@ntSf3{JXI}mm$eSCuF z;(;szFL$R4(44*!hFKa=?w7YC^{_gOH=I1WYd`j}G)IL-svY5B8)IHlwFe}{`W++2 zctI5PciAU+j_s`9_r0ne`xpndKP41yV8`>eaX8uw%+p2JcK+0Z6xI5?2VapxLw9?4 zY&QWqzZSCx1(|{2hgOAF)TO+()-12FB*6|t3#;Tm$cd%s@b~AjhN1Rs%HR-hn6t=< zwQ9%QmI?`N{U~V|wmy5Bgzw2`$)*AKj-jr4TunS2dC@)s46kkXsDeJ(qEb3?8($23 z$qY`?hLA6>RQkJgpsMJs;_p3}BRZ^=Iw@cb1ym2}*_hp6aq^no2{KO*n%ZzYt*s6n zkMnPcg%e=w*H!vIn7j0GdGP8V&F5s{Q?qRodx}esiGC2^SgQLXOK+Birjc{vepEmDcml7*dn6 z?52Ke0k8GR`THS`z{h(*OQ6{d97^}Ds-5zJWUpeoY|Lvb%Y76txabK1PxuIIvG#D3 z>nqFtSZ}Z{I_*Jy(-Xc%I)q6ba)U}4Hl3GxR#5%Ijf$A<4R1$Wwkp<;L!;34v}uP2 z*0G@BJr~{Jy8_FtbCQnG|FUIoI-YaodWT!5goLuAU%u)BI=_ z@&o1mD*Zkstp_rj(=XH-0sh*QoTy+xUHIQZXFZWXINkTbX{8YPwrhPVSN)_R>@eNx zg8~A0YH0pgLEp{S^3MKAmIi z4V&bFVC+}W^TXa8T0{RdngroF+|+$sKQIs$>lQ<}TI`_s+j$jw-0SKe6G_a*`5YlU z?}LfEECeWXR?_0U(SQ2&)(0v}kg&N_w`bK6GJe%9^3Dc8-AL+vzb}T+rPpxCkc$X| zBEoG!VK#7R?s5q5`hl#z!H>@O>Y&idYuxH@4V&iWM!QRLItDR-21p-)#pG-8#_l>~kwP5Ngp*n^$P*&TA# zmhhWaav<_1>ek$bB%@9dfah}5@9ADI__K@rm(hNII5Rk9EcsjyJnnF+UQILrw%uuu z^vh7cC&4!&GV1})gx+W#UX_Lhv9d}R)c+o)y|b_UhbbJbDj6aBC+bj%;# z?fhlZZG_wcy={m2RXfnVpnRfGQy<784^4QM;=ahO`P+Te@hIyb%KY*hISqwroe{0L z_t;s($iit0u6mN|>F;cyx@O;uq#Nc5xmh$PBR7RFJn!Ox9bV}F@>i0*Lx9|kMkycE z_3konvv61TgwKlRwZ6%oKv1#m>m2rk=OW4_t$eswjej-R_QD&Qr^lq7Gd;nOJ(s^p z*$_fv1%zjLJfZ3N{Sxz2zK~qtqhk?c3rBU^_l^+UAyg(tdUL-I$Ytc%+%++VmIsze zO|^=kU1s(|jNAig*#fd$mM}j_e8xiy{km1Gw?e-VY@w@7>k$W?6^NC~XHD_T!Q8e~ zWA8h8~z-+kc4=N~(Gn6-f6G1V>C{U)f_Z!Eitx(ybwV!`=wO*oy; zHL>G{CFmY)$#~=#01SS_tl3ykm_Fum^^dwHtlhFbz=?asQ3FTO-t$C&iTee-L=_0v zyp_Fl^X3pxU!I7jEc@8Na^Z_?3BLh5b2(JHkKasysD+s0oadne4$HTVX+2r z`QP)p3KqZ;T^l5iIYJxjex~N)J}}eDGULIFT$a1mp#>a{@G_n$n(KoVBo1bOWY}#6 zgspeOR==2x!+YA4&omMT;TD$uS@oPF7S?R=*a@f z0m=@JSoJQt0EKh@v{SeZgozA4%vN^*4xM+)+{|7eSlg++|E44OgihR((Qt+khNAa( z96Z6ICghLkPYY<%-2+$f{nC_@uRpiL2|0|X^NgI7;eylQS39YZcQ@*+k#`ewIAo(m zKMw)SgjL^+ZZra=KZRSxHvUi*CT~XW?FV&^c|+!dy1@3GN@bqf3U15N^WA;n4<&Nf z%ffpDplyxUH=zp8%fEt&jZE&qt(6#VC2j=9iZ=HX$84ceY&@yZ1-S>0GbMMZU>>K( z+-8}E8sNuCCnO8+*Pr}zD_Gx$EE@X#y9{8V@Gl45x+dJ8oU>^`y|(Yn^&LZplz>#y zz2Z3J2of%%Yx_}W;Qf+JD=E+v3?8a|pV;dUXGO&0PcNg6b73Si^o|p#gqKoT{)l(b9*fg?H%_5 zQ(+^E1Pw!APjI9UPWsOW@=q^~e-_;axL903;@hrwE4(BSSUl}`;(!M%+73A0snQ4b z1$M?nF&n6eF6!yH3BYz=T!UXj`$!KYu3IoIBf{?b|RZB<>IYC>pB~?@d2D~ zznm$pxFiO}SMwRp-E)KC_V*iSNP&>qd*8V&8uetx&AYauM8Rrj!AQgld*FNb=kL>( z*yqutj)^qlo}qJ1JVW0HME|@>yOobT&D|jhyR<~nui5^!LeveIu3Fv<90&yeilJTa zcDVvUa52QsQv4?!AJi*me;HasE^#Z7aFfadOo_eXZu)_+w`XMi z0jnEKRv5%>pOc3>R%i1JWNg4V=uid(Vct;JrB8$H(%_dlwtDK3Ib`vbtzTvIhtB2s z(PgaDLmd5C7)}PO#ue>_e@w8SQW56q^n`WO_qp3`p5XsBDE1VS3B;!tKa3(_?%I!W z%;rQtZu>gZjWTCAIYT*JecT=P?PGuwao!;KbBZX!iu`HsQ*%;}+#$ZJ)BbmjBZN-e zRokQ|z?`?oTLm9ypcWPGxq|++(LcEt^E7cU;Ql4dt=JZPe99DUAKEOOvee9=a zPhNRR^ngzTm-4SrxWkNUFiRcgpzTz9QF@`82$iRecnl69547->r%tpF7-^5?oT;&b zqy3JIbI7%o@k}|O>E{4H_P-31A@hg7b0u%@sCWXyy6R2;$CygFT4-_u`7#H7$#1CJ z1;W&yri0oY{;)D%!lsV;!^I9qmEtqLV9#WeMd+}DIogJok|UzP6viSZRDs+aUJ16m zv_PPnS8|T$vjy8n-wrOgTL5b!Pu@^E0rstPES{s6gI$hpJ4~cJ!I-As% z_YW_Cmq<4|&)K>F*X`jvwN3(LpYPXbr?Q6K6h(hFY88NTh2{R(2>|_q?So0xo)E7! z`Ip+n60$FRI}~};3Uc~q3~!;XMQ!hbwM;MaqPqDGYrS&;nVoNMaNI&p!iSwTh2IIt zm2wdqNOA^BRpNU_E)#e_cH6tN2=|~;N6i`okdxnWlZ#6_0JvHD4ly3}1yhO9AA_L* zz?k`LjmnS+#?<~&U0WIur6}{zq6_nN;%*AwpT(S{&6Cs#4*?pD?aa>_BFEqg6Q`3Q z<{y=7OtGyy0n^L2wgOo>h#xrjmMCEac7O72zJ6#5)xOU6n|ifi&%D>-b}G&R)d~bk z>H?v(N_)2j2kIF)EnUCgz<<|Lhw8ni576%O|LiP-oSI(}N7Z(tJth zu1f?0(ROq_PKp3NjE)XhwB@10#_m~>vJ>3#*gHwVgj}0*tbG=$eh}`ZZ0Bu<+^4-o zkq3?%0MWhmrP*-;P^1c+V4imZxrRX3>Uyl(jI>T?eLTU%&Q(fX81>xb6gR*7S;HqC zYKELhd@tBuJ1F=QIoOV`_!M<5ASh;6L|l&vmd) z_jb*!8tzqfk2kw|yCGNf=+&teUrUH{jN|AnLhgb|^~dMyB+#Mo-Cefj0^5@1ba~Bk zAaONEw=O{!0_1lU@Q}NMkQ_}Pcbzlvgf8pF`}!g`U#k9d4CWyV9lLgaHxYOQF52B` z^@G$lpYIQ^2SC%%2_b4vbMSfdd5RQA0O1Fw&f^RIP@d*M@j*iq&h_snrPZkbSJ&aI zpDy}>b?~4i`(Z!m5~$(HI4BLf?+ug}WA306d)@d``XETSByq3+2w-O1+)gH~0Gkf| zLo-$Z;6pRwZ*klR&YULgtkHG{m6w6HjU|0ykt!ifspr4>-#@(kkr}o>yK#?K3hZmk z$?dNbATy?4RVowpw%oc?D@Mrkm7kwKX=n|e*Y`*l6xqSXq^Vcpk~i$uO0Mcm(uByi zK=!wxwosPEUhm&42dd)lrhN=ZAUgWZ&3?fHh$Z(!8z+51`=t}p^d38q@@P0Qh5Clb zi5}~A(u0W}+V{eyXZ&F`LW_?)`1H4mZaf%*vL{>#sb3M0v3CM7T4^zF51$hx(Jy z@a3`#lgJefB^WwL5WzX?m!sMb%#EsXxgZGWSGhF%daTC|ULTlTBXSbpSWgiDWIYM) z^{;6%qJF6EvhbdMNA$Z+ZETzN`GNcSq#IA`aQ}aFo$WeF3slWxUpW?NfxeCP+)$+- zB!(Vx*+A}=G-J*4ibCWB8n|<8FBpL9&D(b5b6PMH^!F!kDEdJ3RqhVlM;)iv_cWTb zsArygox|@G2nTxnR(Knop*GFGZaq^6z6@|Ubay{inenWko+YW_3xJ zfyo}ejjSsRp&qpNOJ;-pmLIUbNnM=$Vhe?Pvz6l4v_aS)iK5FJ^^}L4j|0AEj^(Zu zua;@TMpe74^9^56OQQ0i?85x$gF4rpaM_TUM*RI{JE(I=T_P$v?0kQY*YK5KE$)l=&}YAAmoW<&F2B+m8Kdj zCUa;*hXCc*M%;h+5DLq~k%zFu_LTF(MH@Jno{*eahWg6p=rh7+ZGga`?KT`_k%5@?-Kkgf_e^ZiX}qVc}Lh| zQC2%`Y6**;KHJ^3KETi)|JdcA9}vW9DT)l7;5z-O!=ruZGiyBCb>x{BoV+q^=)kKD zwoeks)+~`j_%))M4E@qi9_hsKJ9@(S<0psM&zeHX8FlKzfllxxR9;s9kSC;nnVE3o zMZP}i-W19La4vFYR^T<}d>$FRV|y6;-Io!gG96x^pSfJIREj?AYYDbJsCQ(XtRNq? z(1gn=F5Z2Gq29c)>kBA-qrJx zbXr@~v66|$qkf1s)wMof8~0g%{i!Q|IYVz(dCF7tr$p*&j+*+pfSk_`(J#h0e;nwF z3$b;DfBN(PZ@<1V(ZLsd8HYfD6!)&>7|x$}PO{yvM82l)hR4W7bI{!N+hY^;2PEl^ zvsdvw8~o&So#qAfeN4?+^Lpz;Vz#HnG1NQzczrx=f%#x_Cj9qk6@1}aSi`4-_?);N zKIZG?i~3^1mLV^vGtl|#O&%%I1109|**}Z8hug=hYCCHWYA3?}iZe@s`ENmAojf17 zTEIl+@`(ufkNUVb>6{^%&((?T74l0z%h4#a>%g=I$Ib{%Nw^WF@u0{?2Q=CBt}0z} zfKuwwNz-J1vHq_Uq?l{6+%4q+CF`R>`+Zsg< z>O-R=J*#Sf8jNk6^QdhPE>Z@p}|1dR&InKir)QLtQ{Y?osXYmNOV}zuQ!hAJzWS1r}6RJnYV4oCP)jp5rph1%BNZj-NfXSG+Fxr} zj-1EU*q_rVGk{Qfoon0E=vO>H6R6>41I|6p3@WIftl*ZH&zF<}BHda)pbkIqYIVWw zK2Nwz({sz^0l?zcqravpR*?5<7e!&eGf>p)O-x_4g#t1?X7LLS|JA>LNr5!()0$qu z=g5?=D`Gi-rHV(j6tuuSX`JJ5swH$~vWh=a z^amNK-Q6cguuuCXG_$LMh`xlh3GWw5$X%*gA6Pa3qmxaqPwp`X17`1l?hq4b@v)lR z>POB9MDMy$Wd|`nDQ+=~@{rrv*m}0a2iQ1fo)N~7bD(X%^B|oRi0#pe=v&8-t~lHCEwl7$iM5-vOGX`)*a|`Hb)`V4bqa_q62W> z&~y7&(aF88n6nwG&FX3Uc8EFYx0`uTGOQ$?rcrr>JbSq5@52;H#5q_ z9$lUBgvH(N$F1X}0ZxD8aq9L0-ijL{qd1?np8eZOFQy7Kad95<*w@ZoIm(t}V+QkI z{2sqY9kdz4wv8*3HYjL%N3~WXCn09$R_+-3j?OVtYdM-hzw+n&3#jKY9?U(mWsLeI zD;@^lPslHfSCV%-_+Kv4zoh(;4ebmjIG}GpRJD&~9sRzx{qA9w_&I6X;rx*Ny($!r zEdO?E!u)W{*-OPv25@45ag1!v9{#50=D#~02%nEnTsn3MbBr7!?z-Z8`;AZxs{`&w z?kPX!X)=<8v${Q>MRwSNS>d&#?YphvrUO@Y6&229PSj`5@_50z$CHOSbPgb4PdzG% zb7{dW{e}=d11U36t-QINb+)KqibUvQr=sZkgC#=0Z-~`lZJ`@u+wG7{_jN zrzHSL1r^?TKFCesnNoDGHUg*ICsfyY1Hdt~pZ@rH4@f5jrv438gdtfmUfysIr~}&t zdll44dn|4|bTUW3y{^IuDLJ5JWLOUsL?5mUr(*~9M?)hi9w+p0|1+n(|8y}CBHd0F z^L<1<>LZsOV*2VJc#-~DBqQc;OZ3@Sn)*R5ePLG8H1Y<^WvwOjY@jxSVX1q>8;t+R zyKE#o!P%&3KW5BNN#=Y;)9}Xy^ga2Od+yu76WSS%&HGO9v_vYpUE3dmZQfnj4swO> z;k;}q=nvU>vh57`gM2e@0df)a6d&Y(heSY+hjUxIYHmBui--;GO#jJ>(43BKw8@MT9gbK z)|d6{&$7`4&Izil{aego-f-DNhs_g~OH%Hf-DeHe=C${O#1Fy1^W20v6$jYe*XyC3 zKn7l~tgqjYSD_@7w(ji=6&O9^?^K~*WOo*O@dY!0Uo{3C`%riMfcu?Six34uvxVoQ zKM{e!ig6R$37m(CZdKG@CBf(hG0mY{ilBeHw~8qX`M5bJa%IUDz#X|O^5h2O?EdoK za@K+j+da34d`{7X&fC||fe*autBYqxaNg8(N-64SqMFE=Q%)nsF;K4{T1uBHTX7iSLKoh%$!SM=x zSepBAetn!9jK%XlEyDbcbd)33D)Q3jXrv?L!GrX zwA>UD87#Z2rhUQXCF9Gv8>q*7Sszmu?F3G5XObfHtbnk~Yf7@;9Ojo2Za)!14rk}d z7iR8y5ZV8zQv~xEU%c0_8t|}1pUPBpYKOLH#fvH=xGqA@ITHOjvkK%dh(qku~4Z8_YJY*s;A4Y_O zZX4}9)$M_&E`fGjd>;{qow0`e%n&y+=2e$nxvS@HMT<_ zR>I@4o~jQ+r7gXx+r8m=dRswTJLU&F>=T9h{k?s`rALQx z{-fKzWap-B1Fu#$&<(2}fU*?T4wekmxw9F|mLjh#$X#aMVd)^y)1rUJrXnYiU%P~S zn+k6^bag-ca0R9xuadUa*@4SA&q_;!FSLD@NKBfl^Mv2*EVL*O@R#3Fc-tU9^zE^DINfBMqG()cNKS233%kb?x{K9be?eNe4+z30Rnd z&FwOm;7Jm=hHujAuy6q(IqvDNztFFC<2pT@qd-2-t~n9R)h0~^hT5*PfpaIVRp0md zVxGu=g+YiZ7_$@}A2z2z9i#b+Z+3RzWXDEItwyfb{oJu_^M-KicWrBHmKO-CGn)Tl zL0w)cjU=p2Q+JU|tJFexrr=wQz_}$LY zk!aNW9*z7tmWuP_5|QIuLr~{-`oMd+8}^{_!hSY(mov=VYj`%hjtXZZIKGILyTQTS zlct17Ga$DJKOwe~!SlK)`NIzqSV(zCIE5O6u{mE#sfi~HyD)p%63EaXRr>S&Cl8Rg z&l>9xASpo8`Qq zvzUQNHdh-C-D&7h*80Jr@nn?ZN7yyuNTujW>I2n+_a#x2Aas z^G8+<9EG<;A*V5Sc-M=ssArI!)XeL#2Z9dchWKDVNYDw?6BhM`{lXmIYs!p3bZfT$ zkpkrFlMyU|e^;ZANpiQYxkAT|nIU@q#O;Eu`DfBS#`kn;Dh$NZkZ^d&pp9f*(m ze``F#9KjW)IDd8`jK5q6{rVWsIrThigZHiBti|Xb#cwpI`*2in963wHHS8vj+|3~2 zxxq*O9vw*EDtzNK&MRzu^_{qlec@Gva}s?S84{YZkEJZQL*4{k`blM3NS9vJPr!Z1 zb22#A^R*{T{OX#@rI!Siv}v1}y~qXm`ONr)0rE1<F^Qd|*u%Qd?foiv zeo^kIV&T4F2Gtj1xsz_1Lfk+uV=bOXs}6pa>)fIY=lA757{L4C<8ulxc9HzRG*B?h zT^8rp$`Uum(~x)4#Ve*GNrAUE2D6Ua93YmgsJ^(S12%>Cxh=5oK0%(pHih}bkGIGN zxBm15IhA*6H&FkwwbF5D>>}!*4H@+=KK2Cb)PjsW0S~zAVtSFc$q}p?X4<;3zZd5i zlOXfK6qa5sxPL8lhtYle3it;7V43TCPBQlIcKXqm2_ydiUbE=vA!oYxjG#%J8}b1d zS9e~*x$9`&yVq5`4#3^z)ok|69L~R9z2Sck@5Qs#$JZgB0WPgd#w1`)Rg#a{?sv8z z9N#g%{h1oDuii7O-t7UW;>502y}>#9K3zI@3r~2&MPKA|O#yD6yZIpSnjSD%RHtNj zQlOlV|7~-HCrq)$A3dd|4ns`ksVkD!u(MSDBrFr5&aooe966CCDd$S>vihPw?veO! zqpL-s%DwncX|DA-{rwHSHUFvlFmeF$M2?Wdkne9!Kkjbs>+o zflmOrXpnh;Nnji1BZqPH8Tpz)b56t`Ib7$`yDx2Ybv@y@7S{%sC1>cIABsIAMnIjy zG<{Hq_TTg0zbeB&yPvtA&#$XaAeHG!4+YFe_5DJ(=4Pz*;6 zV1xLXBjv#sz|S60^up*6yoy;8h;twVQ+SzTz$G%|wHa8uJW+=)E;kJ1{)1<3vo$y* z!57jKs+D&-Yl7D42+LnGsH-4VPd}We!HC3bw;>rn7}>$K-zyJw)>jgjHlh!~N6|FO zz}Op3iS7HuRwN4p7n~E@HW~rd$#Ct}1p@lvK51<{PX?2<$L!-{RJg3LyX2%C6{>c9 z-q#dk0UxHrS6?HKFjecr7XjoEuME5$=4-^f-MPJ011n0<6un(IVA>AI>*Q3-wj(D| z&E)Z`5^uQQ*Kl+t!UYcL`sE#v(*T>a*%RTI6VI|5mi43B61cb?Zg?Bv42Is*l*}q; zaCsK>aPtfSZd@F=P9AXw!~3@PUChvzJGpth3+n~{;_0xclSD|4I8hsed1haa${(6> zMvm-dO23$#4xFl5c)azx0f+@iSU-rRK<}rp&n>l15SCXPX_W1Qxwv;982)kuuCU?O zOKf;gPVav$#Nrm@xqduy+_p>$YPRgV zBh6$845~(?*U0UviMbN5FX#!6DY5UaIAV@o4fV$$BN6`m(NoO4DgzWAuXk50ac*TY zW5cyfgM!ET88(NITT0M=&(7)&hx|90Ml!g-ZSQ0|X-O+!yXqGSmU1v^a=Ks7*$a;C zv%N~(BT?LJ^1a@n}c)*f857D8gyQ~-z}(=zyZY2hQT$H3(d-`n09uo^m{ zE_1D?HpCTPNevO_@LXzK=$az%%>`0|3>2DfNdB#V|BSNtucvgH|5MO;9Pb+g7g%WM zk9~AsdzJ}vfEU{DTnX$WL+0IlpONnb5UCJ8Cs%^L{U5u3JXog(9(Ojm6J$L>>Z?GL zKp726C*9K4RhvTz--D;RQPNPEz`8q9LK2d;zjNNy><&|WS!czV&7o8I$<=F-sNel~ zBfuW>ZEP}Qg}x*2#N7Q<-z(&1Ma3|fZC~*P2dUpizoHc3>!M+IIr?iecU8|&kkcV? zxjnBm#{_O)Njnm@P6y1YDs01rDWFPlQX`+k+#v~$M^>Tsu+6?>pWm7v-075kd@~L6 zX~*8jwuI|Ic5TWzYKQ~4_qCb1TKGYTvSU40q7A5YCzM@ZZ-V(Hy_Sldeo+4IOV?@4 z?`&G=_5DO=2O9P+Jx^~^frnmt)HB!(8VlQY=b*lte(tSA|2XC)H`g3IjJ#!4i{nij zF=w{o`;2mUqbJz&*s}V~dBXX^>MxscpIvgYzv8mR34|Z1TX&v8KJ(9q?xs`^@bz@^ z^|B!XmvPCh!4)zTSX&x!pSOpp?OnF}vW=mGK_f4<&;rUtlDbS8ydi4v{;4r_8?e=; zD$j-z0la&aN9weImMpqUtqlEu&u(#^MbZkM$;tE4TsM zoJvc?4GQ$1(P3JuaDeQ`FX;B#7(;I$hcE}D8~TK9n@)QgK>7;#oZE;5WW5Y>6Q|dN zlEjI&JyV9@Sv^+kDX#?8a@OUs`k4P@?WkagIZwwDQk$oINI<$vTz}nP4&*3VUB{IV zLP*Q9!5}BVzOAb-&)E3DVeo%!5TXtNF8f6+(<~rA^puuZ26EU!n+|U!JHYLjjX&oe z$%B8P)9#y%zR(@^Nht~c&gI_@4zgt1KqXhL{Q4_INcSv~8p*|6s`6dcB39<0cWBOj z`HS4&`uDHO@Xz?dCavei>o<7M3-0nJe{q8EX=;^sY`s8i)6%nBIByfE&iB$J7IXrbJh+dWO_{`j%h=}kZ8;JNg0S~{AirB+ z?sfrEyYiUieO>URJ>zmkU0GZ5-4fv}9aw#tbEP=l3H2>XU)tO(U`92#NB9T&$@E`_ zaHGD&D^6thOt2XokGk@@`xp8G!=L`Kv-Ut;$CQ9gkD4rg9r=o3^!o&Epnq)`9*k|#0*R*$S&aux zL7lb9J3Yby9K_ToAI0GR)2x1>6!u+HB3yOelu*F`eo9}Zi~}UH+oUv#tKdEKy6tJ? z=I<;Fe`JwE0)Kri$3e`YK5<)SY8#UYOtGf#3`8BZ!m365LFCtW$xIm>EiuB}z-}=% zE#&q*8H(dYe|JMbY)KI6x2%)|nRrppfB{m`T|cld8?lr>xdVN451*B#pbwB@)$?`? zb?%y@B5jcs9$-8n*sI5=0IFF68H<9}f9u~rqwM|bDJQCyN^{7Ko(&ty`eM@RftrX>*wg6VOd zGI;)4OR;S~K>&8pG;NS}0?J_Y4$^K5$YyA;jg)eROZSfoPir9;w1qKtbRP5Mnm>*1 z_4?1eOiy-C>xwStOZ4%1Ja7l+af<~Ka_?WgY7PU z#=Lo7cwXtNEr;`pZAKQl@*6yXZuQcv4YM``-3awtyY7uS1ZOso4p1Ob&D3vR$QK$a z)SLGQ(txMuTBLBHHOyx+9V^50P#@b}`BCIk7%;?ah~Do25(ZMvj91Ozv-Qk|Apt6E zw4Enf@R88ZqbnN3s||4^j{ui_*njPAp@kOGAo*g&MhbHDmu3D)IvZo<Q6Shd&KC zF4Fyy|6>cD9dTmILXz-($L6*o8`SAs5^Lj&q`|5o>l5W*oZphD9XzNX{8{J}0?hb1 zvg3(M5d#gPPOY;&oa~G`)!BQGbgUqv$2Ifp5#&71GK-Lnas78Z4YkKy`t+f7^kJWz zA>BJ`FI}V)G-#5k?*Qjgj{`3`Xri9TU8I6rgaq-S>xxUXT%mg%sdsat{@?odugdVx z`huJ=+fe6&e%4;Te1WItK;0PdJ5tdD7EUBY7kF9&EwyFrh^r?ks+D$_v>`9%%)I=n z8v1tED2Z$thafsteqHfNX-Hv+3#02KgX7IBm-gHHLA*3Oow$KB>|XIRzR2JO`kqt$ z?dYR($P1lS6m)~ar3;mpk?X7Mb6+T%PYzs}WlBe1%Ytw%QF#FCl{(K&&BCJ;U^m%G zNE^p{ZZEH~>_%VM7_?nC@~Ib$h`Aj*jr^4%Mito@IV*55e(fZk;sS9OSG;yilYoY&M?yb2OK@Al;_kzG%!O3wzj5p6w{OT5 z?pYh-i9)}wgny%44h>#w@C|N2-oZfUIlk{yTkwkwNPTdf0P%+Jp5KYq2lu=;#Gq6= z_}m(8$}yq( zeU>Ittl7dmy*dxDU^=w4@5H~4i#s`EoE8Gfk9bpJeo{O(hSr9CpJ zAU0=7PY}TW3yGn@5zJ}N?cY|l0dt)vy>*E9$L(M;L1H&~>mi6WFtLjy_<;43;g62W ze(>=2)5y?k8bIlFV7nuv1IONFt|!J2;oL64rCVY?P@1&-Haf-_?Dj^#%wJD|J;^&I z#gqT~e*an3?ms`R=>4*SG&}T@YDLwwu3_Hbv8_iwN_&FCJiE2xAN0M^t%R{hlORd5 zVe-DS3rP7W#>g9cfwI}=b$9voA+jQ%WcG<3vPZ=H76a@9={J)YX)_{o2^^i3DzZLHE;h z@Z1{l**f1)33kkcS}rmXAcI{f-b2F^PS%nlIysPY((PxO?@WT}!J!Sx$P2D7&8caQ zvw)+!Bdhq3TVn6d+4Yij9uzjxMzv=`JqANxg2lsFJrwXA7upFbkAm~%5*5C-xt)o z>W1a0H1J;*nc2M+_1vn-_o8;#z^SE5nQmiuAPBRz@fxD8-DHnpEOLPyiwh5QmYcww z|y4N&U^afR2ZcB2h}^;K}hyeq}hrVjP!K>mQ~05wsOHoRYi9Y zt5xH!LLVI6V9>k%(@IbhdrpPcO$26>j?fnsG-z_Uo_OLe4K!Y!yFC8H9m=|Gi$0j@ z1DXBRHS1aAW-oR+1vD9fTEhG&6RvMhBy(Inp8s6@H=k~sG=&$3-h>7J(1rfEc8Q-l z$iZU?#ZH27y=fC&f|6CFNS>I8-F*8s3Ee?Xq=Q;RRoS`{o57(}0cX-dpGh&kE4mail zn75}80Z(PS`MNAXF6ZXW*AKm6!LEJsm=)$HQuaDKAg}i|b9UTRj|rG?R&y(OBPYN9 zb8J|G48+Tik;RJ%;NyLa`SezIXiOUKjA5pL`WE-YgO7dTte)P;-e@9xX}abui#iOe ze#QIJc79-Yw_@>~m>GCe0{la4G@6hk~gFU4+;fUhM~8v7@m7V`zYuBnH|Us^(AB+L0goNJ^sWw+kAi5xwb?W_`O zSWj>A_nH`@jz?BO>A*uWlt!5pt@pPA`h6*+-7W->>Ct^4P+$qFx`C4^Yse4XSjVpP z1$D+{V;yIDC?Icml0HaW3pfjkb2ERLf}=_6=g~Ax_mWfS!l`VpB7wxLBBkXJPOS# z?aiBs(5_oSnVxWkfQ~Yzw|w64`(AOQ3HDh>D%qMgieYZs2EoP2n_fV-hh^>1W*6vX z+F0n>l1Gmeu?)vxP@snDYKL`hA$iJnw6`!ff%JWBfDp z-sm7#i0dmVtw+tAo7O9Ogc$<+@qcjB7*cuov*(HJdF z8!E56fWU$&tH@pp2%^-xieO%_+n#VamG7=_TDm6mJiR|iS43}{=d^?ol`pLMmg*45 zd#{^yojq{Bpq&)7@dM3AR}=oEp?>dzq2*;|6Buxsk|SzcK<0)>r=QwNaBDdBDi!$w zK2hDJaS^vL~a<5&|u=;9@Fq3Ig=ZU{k7roumW8wobXWJJUK^$Q|0QF;_7bTI>aw(D2DrXduVV7<{s16r!?#n z!h3FQvY6;GU-xhEsr8BCv_OPh)~1WT{yyGK4a0KK6_d}%)sVqN|$>=M!gH|s6t z24~?{BXYMeFa7;nMcntO%MX*y(+J zueIU_iHUb_u`Lo|XRF}qv*!vx*V7VOeoz^L7>nl2(vUlF*X8|0vIBh0u6*Dr=Lbg% z&Z;>CxI?MN@?bPY8+bdbRaRPLKx+C>tZlOyJQQbo<=y897GdiXB-NE5az*Rs*2#mg zq39s%A}8uEk6k56wjg)lPkM^ZJuBE&SD`g~O&`ijowGG@PIUAIpY9%(7W=LUmcRVDzvhEL62H8leuMl0Mhx!w2LMX?F9eR@%d4 zU$BPo9`s*i{t|D(dEx=5RC79_Y>zz{W&iA8FmeO>M2Y5cS!dwo-Z^{F zL-g*2m}fN3(CxDmc}PU<>6iHc=He*>j(1FbaK4=98XI}(6ZQj6z>bYM`Y^fV zOJ9n8(ak4CP1Hy2;M=V$xAl%Wg3|8lP_1)R2;Opq>~Pf`GE>9kb@h_!c$L zRcPmMM_=4@?rb-PwIMHi>pjL$3n-YSv*zX`!`Bn1nkRfPr?|KDip)1(NKky<=)jKW zp$F!yYa~~=HQK-JEHmcZi<4i(7~*-57#w)XP#5-ESSrY85x_~~%$(N)^h>MeY5B5S z!WTQXNWwwPyT2baa`re47)vsxgpas@E>q3JUV5A_eVE(n$z=&Im3BV!!#eNhTqxk$ zDF^4{Yky@88^a+s(I}n-A4naiI7TbE!+9MN%Ut^b=x3|EF^F?pow7xnwL0W6=N7#0 zLXJJnZB`(X$qN)tcP)fBqMn7i&~@dh4eW~{ndT!;Lz!Op^DQM$c)>^2`;b5boh>Fo z-rMbf|CO~~gbxwon@;9eT_(UTiBb=EPK2&VT0RkZyvZY+iN*O8pq0JLT~X5n4i0g9 zhZ&2%b?+Zm-~QdlP5-cesJ0Yy-bQ)V%8nrSEjQmQ@E8Fce9oWQYikIj4XKhnZ@uAU z;I-n!O*o%$Au(D6A{X`3+8oy#BAmYcq|P$U8dCWtud|6@?)32w%u+2hfRb}!yXw7x z@wTdD?R^)>tUtz3u@kw<%ax~g;yj?2D)TAd3HxOmb~h=gkim@*L$v;adYUu7YbzF* z*FkHu-o)<>?@!D*um52IYrTz2>o}!h{IJeuxjF?{OA!-GbH)2?r}(dnrGAk4rkt5= z+7I*_*I@WFfZeJ zl<`X=FnE$1Zqn)n+3TJkb$V+GcZf^7zr|aF`ldy`)aNwNf9WM`PC$P89`9wvW9pE8 zJfZFZ5p{9AbZ>dKQ{l)q&SPvfL}(BR&`k690cKLk{OW=aIQ=>GD5{GBbcb$g4;JeK zOR&X>#$-!iA_d;9XtIMbwk*NV={Q%W=j8T@@`KJnQowBqO&~d)-{L^$4y<#Vxiv@@ z@SS9Q{wV5wPu*#H_I;WLh63B=!#GGV_l(SU{wx`~Ik$KW$9qA<)4>|;K~;D?y+nIG zM1rEk0;9{wpS>uNB**q2_2s~}t+YP`C>%A8)7<6{jbS&LFwF#7F3V;&D&sumQRn

j$H80eY@e*6`Kp>(d4Fi=`KtR*miS1unKr5=reYP=1xmV10%x#6ICk zZ}rv&lI4y)$x0SLJ-tYCZnp*tRoEsW_iXZ z``mneKy-bUrvv6d39(Oy6l_<4*G^e?_Rm?sp(A|>L%tNqdCh8#Wy?mQlL|3g0JL&14v!%6=FZ`0|U>ts`V;k4yo42>+8E5{?@;Lw;=q( ze(t-zB_|hhFsCP5V(CKNz%A(8a1!z(Ls*yk!u>VDN{~{Ug8d#njvF0>J#L`v)-opW z3iDM>r2gcx0hrKjX*@X(AiT4*l1Ww*Bv|tfDTw&Nm%PYFp3cZuC>1!>R44fr3$_>mW1-d+;_B-zb z8s_qh7i_dUf!u(2n~2<8Ce+8BlH^p?rb2Dz-Z^g6uT*R14j81{fLNBA(Y*&|V8-M> zbO z)X_;Ruuy1o<7ZAkl%CquAJ&l8l3Q!tgqVc2OBN!m#go$0qe^mvCfYyFmJ;(E8d0zSJd*e zLsc-(eEimID)MX2jeE&w$-9BUo<|-gWru*UZG`liAPa|@rhPdx-GTq|Wu7wB>Gk|< z@;Bi|u9n=6MSgBG2;1qsB8unR@Y$Z?cmZ2*IPbajMYk-UK+V}1FXLq3pke*ONQ zRD0mkFuB!dX$a5MU;UCvAb{3hm0RE6`@&__2JVSnOYkzD9LU&o795{pb?x%*S;R{Zf7i`l#SD*)ZD(VIC`DEBdYFjeq$N3>8 z&8U7m4KgLaNj>kPLgn3EufCQ#!tF7wI%A>?kh1z0j!8Si?G6crwt6aXpNZS~8GX86 zb_>pwujqs3v2){lb}GO}uFk1XWNi>UwTbaP@=&?InHoOd<_#k+O>b@_>w$Yi@HQ^w zHAmcv+BA8YjCtIre?2{}4O_Oo%6yG|(iy)81X~H@9Ur{rq48D$v>C57@@~X^7))df zaH4>gZndwjHoy|wuf*|QP4Hxw&3JBtzO5yaFi!&way=}LNBMX|tI_JnGUi_tFzs}G zEA9!lUE?)RoAe>MDu=K=#1E<;?Yg46-~wwB7bY(n8pEsYgz78P6i{e1lbcRA1rA$_ zy0?>NaOG0hu=x|z^E`Ar`4Xk)(ZOABM8$Q%gUTaq{v$l9V50wXW2mYRFkHB~eYzQQhq72?;~wb35yQ2&p^;jk z?lnxG$YM{DaUBd-b4%(*<3#dZRlavAOKVC2|l9_X1(hurt%B@POP2h(kf9=*K zcjzha^VUCwd2}^w&kKsRp-vALeHM}i?TVx|&P9C) zZ}(%U!}H~ySN7^VHz997zVc7#IW0I|+0G9{y293d=f_{ghe^n+}Vef&)T z;GC})QwNHIv-Ji7L&EbCF)O`H3A%{LthiA8)F4Tf6gO3FcS|Uezl;!fi z4$N0u>X13ep^aR*=l1j2hd^bDXd5I5j9VB&m*5J;$71g!a;av!?R-r^^n0q3tE=4PGFw+CI4-T zI*j}CWJe!&hKb-FPK}e^aF2LxW9=PnsAbOnmJ+TAT4pOb^qVk$bPpqIScV@Yr%DL( z2wB3bw<41LIG@g`Isa{tjRv=y!deHLyX&-)9xJK;R;_S`J;n#T_Lc*{R%VluD|u~A6nP`r;p9l z@#>~mF#0t$?mlySr;#o!I^wIE(Lk)d)JB+fC^?$QxDxoK64?pP9ScJ_;qyl7aC?TV3%_8!#VOw9*XJ zfV&|{^~$< zF6suoKU^68@*nxRQthYwtGpm~DfsH|Ltemsika|K$qpVp6uDK`>kCF4r-qZeouQI7 z!N{IV9?WN)-sgLgVClZ8g%9rQI+hmS$`&)o-Z&t>SxynwZiPN@y`TmDf&zlYm_yqs zPWOlF76BHVjujp4^@Pb4p#y!WPh>s7!nN(BJI>|Hogc_y9=m0rqrEp7MB{%MCX~3s z*EQaor{k>P$4DA@8(Ki_^3@WXeg*iQz+}Dj)f^Ppbbn3i;CwqN$@4&?9mu6tbvu92 zf%DuQ(wwNr`KmZ6-c{=X6EOjVE7~$(@aEc1Bjh8Lrk5x>C)0pa`0(XEH{?ikj|Hp^ zdxG$Ix|;;Q57^Np&e?6U0m8I_7GsSB?A^1Ywbw-rdQWVaQMzIaV`09vO7?b8-@K6N z5$p~MZhJm9_yYy7NPZFTRYOvewt1GltyNE7OFc0*Dbi=(&2WZ~g z@Fpqmudm~Oy8r+F{QqBpPg1{S;!oOwny~*Hd2SD|^kI5BoQho3FP3w8arQ7Ov@zfV z`q&9aYOXq;_kyLBW`T3ro{;rrn~9YI=H6&aS)4#$XYQK@Mw*xh9R2d0ymVIyoEE43 zC(xg+CB)PJ4!Ns0AAM6xJE99GOAd-wMYzF8cDicsJ2G4hvy`BquT1s)1qqrc1-cE? zG6^pz;KlGnhwMTI?aoj46+U4d(|VHrk(UV1;a&naJ?_)6l*!$PP-nZeqFI2Pf)cXQ zk(ycy=zL}{kn&0jUc^u+hmfx~BA2~^t&IqUpCevYnAyS6z0Z03KWISy2Da(jx!&MG zG`*(3;0GmF+P}z2nuCrpapK#@L%{rEa&{ECfebr>^vrO6P?^##!Lt7#1a4^O)@QJS zeAQbWUM8l%yR(ezETaK5Z5p<=ec=mgT}0l5H=b}ckkdP$#Ry^|qwa3eCBg5W(g|KV zB2)&7mYm+L08=-kUq)71!=!;_)(+$;ztmbS5yS>3U2Q3^&V3xPTpFvqvtAfTqr8(2e=k6lFmDyh$S`?E?%FnG3mVO#*YQVpCk zHyw0YG2eKMpJ0&V4CdyMA}8+ReOdEO#w`Zq2i|qzm0G6_p9&e39iCF) zzynsG$ME|S+{>cUDR!V&$9dI?~AAFWf}cQ!8)%|W}@H) zg**I*!{r^JsLrl53iYag_w(Ns_}{F+!zs!-U(69YVVBbxrC<*!7st)2*Lgwwb&A?N z<~Eva@ye=Il7|xa-o2kt*BAK7V(*MC3BI2HJ;HIu2R5uZK22gb1Ov85+}o+X@WX?6 zQ|q81^vxN%$K|`gk;k%&O{xm*i(Ki5 z&`eXDAAS*jf3)R-4V>6q&s&1$nALq3G;80WZ{fFRGaKsT0vlVOW|gA;CCghpuuWf1uqfUF4-E=Bd%i#jshy(cveD zoC!3T6L6{0McwubzMJ-RQ#v4WdaW`Xc`L;F$#*Aj_`rAVKQ|(Lkgqk>viX|;@|<X+t&SW5##2S!PhVj!dab6-8(u#sym);42Xa;p)$AME8jN}3(|3g# zBS^59VU@5+od#y_R{{@~AkXSGYt3DfGzcUFZHrXb2C?U-7`GlK;r!^`bSQ%z1f5|S zV9nM?PS}a_XKPVMy?S3mTUZW0mkBPbQILS@P5o%o@XBKwdlU#y(!C2Hdh#gEt7MdJKUW^H`+ z5#D$EW4?YO#vXtx_EW~6_B#TM{A!vEB0|5!@ADGK0E0B@S{BYM+YoM-GRF{mngR%G;frl5l$Kn&e zuU#O+%=_ftyD3!2c;e1+=aDg(@&Ee6f%jp)FKs2E=r40q|B|*V+#6yJbp8B2?hC)A z&QlXzOh7L#@cU&W7jWql&imDkeSE>)T+hl;Z`RQLl9)~a7q4S3{L%`r!>(m$WY`Ki z!zERPXWf9`_v@7xg1Vq*rFBK!R~n*zQ3=+_r8)etn)gJc8`NKWd*sS3GQ@lkEmUhn zU;QZ-=Y=pYup3nG;lcW?>eXzNi<~{tiSYFfm=CdFG%Q#kM}vi=Cilyp_Hf!QOvJDC zAowtUFVTMLj(S{%rV|M9jU@7Z! z(S24u$jn@Gb&&Q0J|6}~W#qru@9ODO7{xrM-0Eo2$7C3Nr-37_tK1HfnN72!zc8)&b=LPbC;*W)k%(lwU>DA z+9N7RIw%W`rimJidjaA(&rG#oPI1lPbeb8LCq(|#^WU@|^_#hA$8RtBLfN+K?B%zu zU?byZ$w1_}j)`z^-_obT#XjQ$%*&X^*DxKsMH2llqpJlk@clY|J|xV9dPyd;nTi(V zP>G1Na0q01gH%*dx?y#R@zwi5S3i^|Ua?<%_VfyjH4+cgu@b9^u{x076Z{7R9 zZ1TUa{cl%b`^Ku&A$cblYdfRZ*lGixHxyY_;CZQyTK*^lePUmJIS$`l#D2ZfAkR5# zfY3yyYii-{5WdWNeqXE;q5(b9S~#ShrOZ0qm0A;E)_ajfgLu2l zkHJyZdH{muADeSZa3P+qG+ng1weY(2yE$ZLq8mqn^Z9_eY z5#RnKAqP0kroVCF7a7h3YlUcS#5u;#3r9X`IKoWfVc&QQH(;QW!U9&2H)bI%G!R09 zn+?6G>B2P3SsoPB0OZtKycEoglZ2j*6K*pt7NB3TTJnO63U*?}ndb#@ZlKE27N4*GlIyEL?XGdTcEi7;PYy>O>8MhxNT;RrF$;E~Mb>uex*mKiE z8^|H+oVnC};HRoF>GwxJaJ!fMTpe|fl~Mxa$?!4OZ&<{BG+T462PJs&D5v}++SCbQ%`8~YE%VP+UB^+~Y1x|3h zgX@Bqfe$#emw0~ufOF~L_W^;JGkPg+A<+_ZR20UlTk{0nA>y)zM5~G^=y`WGsNJxF znm=K8)zN32I{l$W$`HAJnP)q}-x35kY)$p8G~fYSo=}>)FIXKhv%ZJiGrhck*LS34 zK;fO-XkM%bL^a;dF&aW&BiCBzfoMFRmDES^-H->-Jp+438T6rRX^mU-k`}CPo3wg} zz8#H_>_+=c)cD+aQ>#hzy8XTTI55@^4G78y92X|`A1#`1Ne~>L;Gyb{HN1;kY^zXOnd{id~7!4l@Fzr?dA zC~)JvgOKS6MWsNqB?j^uro_XhcX+`n0aKA``1i(gZ! znh9LIc}zt5hbD;ia(p}F=Lp6IKZN*~$?){3$Hza(W>6#)op;Dr0y3VRI763d4aO2u zf$4ZoyVUbILhJ$&wz_=xtzuGyl~Dfe0)O;D?1bJ*VG;!rypzm>sxhzj+x}X^c>+9P zbJ-U;stcbY=Ml0=0wLLZOnZL#f!eZEpRXG75P3dooxkM?Vxi_fTgc`xRo1evHAER0 zylNQtxEjGI>+|9rGrF)ldXalv(gd`f&nWl&A;HMbh1X9}zb1b+jsAK#`U7Q%gz_aV zU{$?*QE;O@#8dnZlJh*l5Ji0FJFMZVK+>4OP4sv5eGT5*jrvLFVR&pp$LX$Oy3iSSe?VWiv)!*L7HBgBVMG_@xAVsE3y~#Y&F&@Kl za5x-FsF3Cql_`~?NfSbnGK3^Una46lqRALSlb(J5f1b6T^{jjE@80|P%VM3*_j^9= z?>>9)&-?v)2bXb^e4#y}{UxRDNG%H2k+LGW8!NxoRYp)z(Q(VT$Hx=Ctxuk|j5E<% z>#Lb<=!45i7dkd)d10%4XF$5R0SsNBwl|N0%a^XJEM?J%F8&R-A6*@_w{HydJo5w( z=ixj3o=$l3>Rv)ik37Dd+nzXOOmen%XuY`o)C*z8g0{uhc9>rsZDd|H>udX8Ke)3m z{JU1*XQ)|(L8d9<_ls-Puu~wuQ9$iyvkhGA&0orzxxn;xx7_^;7Wk7~;C_wh>7;|q zr8ne|=l-Rj#Sb5%qv(3uswfLY6nTY4=@Q;=QuMYb+dUvGrg?cyK5#;Ju)S`D8y@P_ z$2)IkAn9(UzROm^pP%0v?Mk??lmAfonP_8bW!3DK9#+1*=uEVCeNM6af$|o?4p@fOFU7VxfsiN2ks5X|)p)v5iIdznheKt`7Sg9Klra+|Jm;*|SH;O>9?@-*zkX)- zPK>4oDfV>9Lv$DK<F)>;{D-~HA?}v4n02|MsgbmYWyPK zv=KdFi1-q78V!d<1G;=vYxL~E+C3ny+ z*=}heJjwTd+vOAEi5{rYwk%JAhS7CAU7z-|kf$nJ$CNZfkj|f^bzIiyHp)npJZesK ziEJa1%7kA{X(ZbV3Rs>hlavxV!Y>I%P7r-3tDRn?NcIEcuiLqEtc~z@9n`aLHd}%J zWd*8Uh-po^DS;B-GU&Cy0_Dsh9}9*Ps4MrzMuyVR=o~AYQBQKaE?@Q)E~0{`{?|$#Q=Ez)PZ6ovC^w{p0 z3F7zX+#BpPM*N)FHP=(eHAr6jSgW);(fR$z+&tdi$U;s3yYO#oSSYDh*i%&OiUst# zv0t1-cilX=#oz_ue}*=Vo^SNQk0)`~TgK_|q{`<$UN48BOBs3c8x3)tBU$wpm?(5v zkUAFZ1C6|~4#!e!@Cqw?Tt2FSv(FZru%Z|^$ygmJ%fW)V^O^n9JsuFstum~rX2P>^ zu|&fe!q0lJV{P*ZCNAXZy)8{Jz^A!CQ_m-vk@as|;yIFEC$cpx@qrhM#?RhINS?Bfew5{@ceMRU)&WOIxg%Uv}Pl0)j$b{(}yI?9YEl+Tg= zsreI)Q|G+wAZ+-vYen7`C2z@ zn#8xUtZ;xmG1&=6!j!K`t1bIoUO$nZtplL~ zmPK*42ULt!2f2w^gG)wLHGdryUH(qSQF|O9A zjmmMKUHgl*F?mb%qUL5#tlG?Jul|v6mtHxa3Ou_VbtRf#A8gb`!uzT*Tau5NSfQM5 zdxVASaXkfe!g=y4ymMIN_cpl3={_@jr;R%v^WzFGc;Zvm%WvNfF_B5z8pa)Ej95;; z4F#mn-l(nKe2eh$B|}2@d{1zK{cvap*HapNB7VFY+wX<9UGzR#NhY}3sD?@YR7e_W z_k1WYgVd6p)1As%u*lSITKh@~r9rRW)g>rGJb`|z`538BO4hAUUwp8KJ5M@Eg7jPG zmE3L0qhjiX=E8(EawzUNI2Imcg*l}hQo_+JaOLX?a1#Hn@2}54{Cl);r1H*u&V?=* z-SMkCpvw@Y+t1yGmlAR-_iJ|kHU?Y0mP&zvBgwB^8W^KU@=O2Zp1!f)9l^FT=_&dY z2*)U|*%{-4Go?q?FH)gnF(qbsVISd9#|^}Yjj>R+QqENCk~I>?rn@svS%Jke&Ai${ zhn7a|&-pEOI45*(=)nmc{6h!x?3>S4;Qv?w#TOb+5~3`@x!OF@iL49ktyK6q){u4J zR2Sb}fASpgM)^E(HiGA(@vXKJ?$|N?J}@H15XxIUyTkj)d=zLMZ+_bV^JLX6CX5+4 z-4!=ba>Eg^QYv~hdlhu|pN;e5p+fm$;O(2d-uRfW%;ZgTL|j`{rcCNiyxpJMu5gbI zNkOWLa1O~U`xvAgpJIVe2ZdJ6@S77p&7tgbB&XfMhKE(nBwUctg}kDwx=3LcbM0GX z0~y1&6c=_M{F>6N_aR)Zd}a0B((4ouW7Sil_{9XnhKau#E_>!f6{#sA;G)_8Uzg7>kkj~$hF-5ol8Ijh9a=mCc5}FqM zknjM@Gt-&zH@#r-CNhw@${MjQGS+kb?7{iFM7!<>3(o?1_=n3#1WU;ex1B zie-e~+N71$Gr6Ad6qPjJ%o8Dc>c!hj^JUd=vehIjrCSfkm)+hU;|lqOAB@c7=y-cs zcjx>kN|0owX{BVlVQMDg@XC`6l#kkZ4dpvyz~zz1Jo5ckdZO*qiAcivubw_)NY>#q z`?mFs513-p49umUX8GFT#rMj2Z-{Q!@Nw6*Jdz8y zS8ki+2YDveB}&#->iIyk+B&U^=y-=}u6yy)JmKzIc_>Me^bI5nHCDKKB-&)8b}jc+xntb69;}WE_^X{hvNctPzk?5 z>S1Q3%pAfs{ZSZ`x6=|EZ+%gD!l90=o00ZhH>o%<`E$qZcdjVCsPJRp8_`8G&DTy? zxPhash^^I~1<#{iWO?g?uY25*`X6pXYc!|AyQ4dhS*o@-XpI|A)r-Blsz>@YhsrW+ z_=t}A*9L2^!^EGPe8ONz$rzEZ_T+w0V4$#>dF2J+MvaC$7A~x3p>c227H11DtVpV} zbZ2)Wc`Du&xnf#i@oT$3ge1pOTIASr^?r<_1Y5?-p)5#db}}5Z0D_yNw&bw zWoftGYe9I0kX`f&f?O(S&=({6-D=Kj`#20;Bh^i=V}Xo-a^N>pNIfV z)5KlstYE1kye!3+g0vGatq=XuK@i?zo-hULZ=Jlf)`S7mP0?>FRylzc^+0_snO7dx zR0La6T_B^fS~f2IWo@fXTlUYf!9^!W(qc+zjVC`Rcn(MP2?%U7L~*5bIZ8ORGJUrB34%U&z3D*I(hyJZ_vaSX zZ*)aQ=7aWoLq?!{I()mLMGct;H{ua8ri|KMFiCfVqr-Ok=to==(K#GiB7FYb2KPAk`9vOhw0h!sU_- z{e0kIt_1`>|Jr?#=pWC{HFiTZ%y|UVt=y=8@sJ?yf z=(?&fRYAB~f2UzM`!=%`_)9CWDdJDT?fWb6DPGXxh$_+Tawh0%>A9eJeH*)e1=(N9 zDN9R)dxO38%z*WF3uxP=s6OQ~#-07ksKXp?$kymR*8Y;rQ>zae6luHQv#zS2e=!ra z0`IIp*Ai~NipiFtVGU^f;2h?9L2@5LIv0KuC4M&b77>*!WppSWdsMhiA1aN`2NQ^% zFr?*)yF|7nLX@AXTwc5leLkmb8aSwMtxmg^7UBY>&=dg+J7Yvg4qh^^X5ei=)yrxr z7S6a{J*6t+j>+Q_r2Alrg}Nj3qkk-MR`OiTpo}@_tYV|d0vk~3Ip_KI6aJTm(>}Fs zvX7oWC^^vJjp1E3cKL+2x<`j&ap<%*u6_Hs{xj)=Xcw8Dd_wY5G7H{FHC&JcH>16{a+Vsm~4sLLXd@1&gaPd#1+FnjwM7Z=}-!_Y$cZP)Z`PXx9>Z9Sg zJlhIOG7py}JbyHo0nwc{x(|aq@nmO+*`oCn=m_+iuGUw8MZlhRDyJ!^LIHQJV$AWR z)8JBQ5#iDb4)|@(HbDHZKOOx<*V$xD4LN<&8~qC55xZ)wz*+sn^Fod+YFBjogbSO( zCg6Bdc$*#=D*MKH&s$@#itCPasTV{J26*O$n?n36;I=q6cAH0ZRfhJni(3nfs zqtoYNN;Xh&$wvJQ>((x)@*1p|@}ObgVWTgfPRq=;RoEPJE?Y*4k4?}1)pQJFsE&7bwA<6i$~j5>XH6} zK$n^cJIO1*GjUf(r$8NA<0+;2(PW=&V4YAWNOaRCepSh@N&g_qXoSa=iE_Be{q8eE zXl(AqDM!LPWpO#8vM?+JN>IhIdZ`8Cof(FaSn!T5^nFyaM;pgrq z>$($^?hlhJWaj9*J}f1Ay@BVIONkz);(mNpI?)wf+q}bXs>}-4HzduU7G^+EQQw`W zLVPO4o);QAC}0i^ZtdDfcs0g9E$l6rcrB#Q`{b(+4vzOv>oLhbcIf9Ruho`lj)*!D z;O>rn%c9EHfAT_MTyyJ<4i9`LIe|umTe{RgR_VTt9{Qzp>YZQPp=&kIcCAVe==F&l z78Ym0DOIlf{aQLij=BdL=(s_QKXQiEwF}cPV? z(b&T_IWpspyWP58UXPqms<=$Ug=K@<&?>Pye>=3tN)NV6Xd-y%zWBXxH+Zb%`JzYn zhFqE3>p6TjP&ufTsO@Nss&#!iOAdITfv)f4sBM7;d)j#a5Cx@45UEiod12>%Ox6m! z;q#BG42R`A5czpI&5S&UI+o7y>>GSg7n(gJS!jp+5!zLyR9z_3d&2lg-{hUDs2{ha z7hFfiY0=}>I6FAf8zUqlkq_(tz`A;-E`cp4if$q zr;W@U?Z*rGoc8x0DBpD)p;0i=BusWEX!xq%9IX)f|RMj>f^=l;>+GKJeTB z^H4Fv6*L1bcacbAtgf23*OHw3#U~V5*gLtSkMWCZLf;bG&d85+L|EWUL(x4=vR=Pr z%%9yvcrW%vxuaTF?I0S=?IreZmP`6C_IS?T&OfOF9`e_|~P;Oi1{f*>@N9|*4(WT+khZlEM&XGL0FhhpKa}N|~SF$r~ZQ@N2}^a_Vy>jHA!qZxOnNe*71 z-SMhRpIL~L=&p+6Av~E$7D!E0T+JTUyqO{{n(OI>LF50Ohm3ZsaQqk zZ}~3Iig$$L&v@VatX3Dzl0~hGEe_Z%_?-I-7X$hN#~yd_IYUwQXqn<+B~k^)ou5A68x>ZWpH~+%f$I<3+uMnP-$RwP;5I>GA8E@F|k2+lu zCLDsO3s#N_TOcuEFJ|;r9v2P1G=(bbqp%?7LY)WE8PC-(i_|6iUY$q!2PBy2rm)Z4 zAUZ{X{L?opH(G!d{;4Nw<2E$jH#!q0&Itjl%eX-~DWo8%+G*vm;O~u<& zz{VGLuE_cy0jL3GjFGcJ*$B!7dPYmg=a7lpF!Rud3SX}KInrSi zC}xQcjcaRz&EN7dRazg?PG^oRZ??qUU(I+FPx8-V&%_lGKbdj2xp1%$6Z->-_vm(6 z!9Mk1zpbtfI5_W36khg3+;Op27r6+ZS>TSU439bPZW~(NINuce>W?d{WH8|2liisW zOE~!w^uT57SzuGswEsqOT;6@6#$C1XK*-L?uV-2buWaJXn-&=+Dwkv=$ICM?Hq|R) z%EsxcptHkbOEhCqWFlr4JJbG*A5UaL+(VIo~w)pv~0gV zaC&Qke~ZC5dy}&j_=_v>z{DtRgNrLR9^0B=f7=zwmWsJs#>xCwC0}5eU<zV>34?zP}{VV_-ykpZ-2AT8p1c_ ztpko);{$!O_awg=UfM?`sc%xnwHyxlOrm!b8<%gZ*-JQ`JNtAsC5W#>j47OI#e&@R zq5GOz9ymRAxUV+O1=?08_Nw#}UiJH3)C_NL#13CkS0Xx^fYQY8A1YbMm>lzz11+G)3od29$B=dw|aig(!kh?g)ǦwkdXoIMb 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 aJ+OfA3F>z=xeYtwpSKco@BAO30{;(}{dt%G literal 128015 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 z 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 diff --git a/gold/min/sphere200/base/quad4newton_tex8_grey_lanczos3_lut_lerp/cam0_frame0_field0.fimg b/gold/min/sphere200/base/quad4newton_tex8_grey_lanczos3_lut_lerp/cam0_frame0_field0.fimg index e04ccd5598a697066814d8b3695006c107b5f576..8dcd33f1351f9768d2eae0e444c5456a7d253380 100644 GIT binary patch literal 128015 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