diff --git a/README.md b/README.md index ca7b9aa..73867b8 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ including: See https://c-cube.github.io/printbox/ +See the [test/](test/) and [examples/](examples/) directories for illustrations of potential usage. + ## License BSD-2-clauses diff --git a/dune-project b/dune-project index 7329786..020d80a 100644 --- a/dune-project +++ b/dune-project @@ -47,3 +47,17 @@ Printbox allows to print nested boxes, lists, arrays, tables in several formats" (printbox-html (and (= :version))) (odoc :with-test) (mdx (and (>= 1.4) :with-test)))) + +(package + (name printbox-ext-plot) +(synopsis "Printbox extension for plotting") +(description " +Extends Printbox with the ability to print scatter plots, line plots, decision boundaries. +Printbox allows to print nested boxes, lists, arrays, tables in several formats") + (depends (printbox (= :version)) + (printbox-text (and (= :version))) + (printbox-html (and (= :version))) + (printbox-md (and (= :version))) + (tyxml (>= 4.3)) + (odoc :with-test) + (mdx (and (>= 1.4) :with-test)))) diff --git a/printbox-ext-plot.opam b/printbox-ext-plot.opam new file mode 100644 index 0000000..d5aa992 --- /dev/null +++ b/printbox-ext-plot.opam @@ -0,0 +1,39 @@ +# This file is generated by dune, edit dune-project instead +opam-version: "2.0" +version: "0.11" +synopsis: "Printbox extension for plotting" +description: """ + +Extends Printbox with the ability to print scatter plots, line plots, decision boundaries. +Printbox allows to print nested boxes, lists, arrays, tables in several formats""" +maintainer: ["c-cube" "lukstafi"] +authors: ["Simon Cruanes" "Guillaume Bury" "lukstafi"] +license: "BSD-2-Clause" +homepage: "https://github.com/c-cube/printbox" +bug-reports: "https://github.com/c-cube/printbox/issues" +depends: [ + "dune" {>= "3.0"} + "printbox" {= version} + "printbox-text" {= version} + "printbox-html" {= version} + "printbox-md" {= version} + "tyxml" {>= "4.3"} + "odoc" {with-test} + "mdx" {>= "1.4" & with-test} + "odoc" {with-doc} +] +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +] +dev-repo: "git+https://github.com/c-cube/printbox.git" diff --git a/src/PrintBox.ml b/src/PrintBox.ml index 25ea16c..97bb73a 100644 --- a/src/PrintBox.ml +++ b/src/PrintBox.ml @@ -38,6 +38,8 @@ module Style = struct let fg_color c : t = set_fg_color c default end +type ext = .. + type view = | Empty | Text of { @@ -64,6 +66,10 @@ type view = id: string; inner: t; } + | Ext of { + key: string; + ext: ext; + } and t = view @@ -203,6 +209,7 @@ let mk_tree ?indent f root = let link ~uri inner : t = Link { uri; inner } let anchor ~id inner : t = Anchor { id; inner } +let extension ~key ext = Ext { key; ext } (** {2 Simple Structural Interface} *) @@ -219,6 +226,7 @@ module Simple = struct | `Table of t array array | `Tree of t * t list ] + (** The simple interface does not support extensions. *) let rec to_box = function | `Empty -> empty diff --git a/src/PrintBox.mli b/src/PrintBox.mli index 1cde757..d298c56 100644 --- a/src/PrintBox.mli +++ b/src/PrintBox.mli @@ -103,6 +103,12 @@ type t (** Main type for a document composed of nested boxes. @since 0.2 the type [t] is opaque *) +type ext = .. +(** Extensions of the representation. + + @since NEXT_RELEASE +*) + (** The type [view] can be used to observe the inside of the box, now that [t] is opaque. @@ -137,6 +143,10 @@ type view = private id: string; inner: t; } + | Ext of { + key: string; + ext: ext; + } val view : t -> view (** Observe the content of the box. @@ -317,6 +327,12 @@ val anchor : id:string -> t -> t @since 0.11 *) +val extension : key:string -> ext -> t +(** [extension ~key ext] embeds an extended representation [ext] as a box. [ext] must be + recognized by the used backends as an extension registered under [key]. + @since NEXT_RELEASE +*) + (** {2 Styling combinators} *) val line_with_style : Style.t -> string -> t diff --git a/src/printbox-ext-plot/PrintBox_ext_plot.ml b/src/printbox-ext-plot/PrintBox_ext_plot.ml new file mode 100644 index 0000000..41691de --- /dev/null +++ b/src/printbox-ext-plot/PrintBox_ext_plot.ml @@ -0,0 +1,428 @@ +open Tyxml +module B = PrintBox +module H = Html + +type plot_spec = + | Scatterplot of { + points: (float * float) array; + content: B.t; + } + | Scatterbag of { points: ((float * float) * B.t) array } + | Line_plot of { + points: float array; + content: B.t; + } + | Boundary_map of { + callback: float * float -> bool; + content_true: B.t; + content_false: B.t; + } + | Map of { callback: float * float -> B.t } + | Line_plot_adaptive of { + callback: float -> float; + cache: (float, float) Hashtbl.t; + content: B.t; + } +[@@deriving sexp_of] + +type graph = { + specs: plot_spec list; + x_label: string; + y_label: string; + size: int * int; + axes: bool; + prec: int; +} + +let default_config = + { + specs = []; + x_label = "x"; + y_label = "y"; + size = 800, 800; + axes = true; + prec = 3; + } + +type PrintBox.ext += Plot of graph + +let box graph = B.extension ~key:"Plot" (Plot graph) + +let plot_canvas ?canvas ?(size : (int * int) option) ?(sparse = false) + (specs : plot_spec list) = + (* Unfortunately "x" and "y" of a "matrix" are opposite to how we want them displayed -- + the first dimension (i.e. "x") as the horizontal axis. *) + let (dimx, dimy, canvas) : int * int * (int * B.t) list array array = + (* The integer in the cells is the priority number: lower number = more visible. *) + match canvas, size with + | None, None -> invalid_arg "PrintBox_ext_plot.plot: provide ~canvas or ~size" + | None, Some (dimx, dimy) -> dimx, dimy, Array.make_matrix dimy dimx [] + | Some canvas, None -> + let dimy = Array.length canvas in + let dimx = Array.length canvas.(0) in + dimx, dimy, canvas + | Some canvas, Some (dimx, dimy) -> + assert (dimy = Array.length canvas); + assert (dimx = Array.length canvas.(0)); + dimx, dimy, canvas + in + let all_x_points = + specs + |> List.map (function + | Scatterplot { points; _ } -> Array.map fst points + | Scatterbag { points } -> Array.map (fun ((x, _), _) -> x) points + | Line_plot _ -> [||] + | Map _ | Boundary_map _ -> [||] + | Line_plot_adaptive _ -> [||]) + |> Array.concat + in + let given_y_points = + specs + |> List.map (function + | Scatterplot { points; _ } -> Array.map snd points + | Scatterbag { points } -> Array.map (fun ((_, y), _) -> y) points + | Line_plot { points; _ } -> points + | Map _ | Boundary_map _ -> [||] + | Line_plot_adaptive _ -> [||]) + |> Array.concat + in + let minx = + if all_x_points = [||] then + 0. + else + Array.fold_left min all_x_points.(0) all_x_points + in + let maxx = + if given_y_points = [||] then + 1. + else if all_x_points = [||] then + Float.of_int (Array.length given_y_points - 1) + else + Array.fold_left max all_x_points.(0) all_x_points + in + let spanx = maxx -. minx in + let spanx = + if spanx <= epsilon_float then + 1.0 + else + spanx + in + let scale_x x = Float.(to_int (of_int (dimx - 1) *. (x -. minx) /. spanx)) in + let unscale_x i = Float.(of_int i *. spanx /. of_int (dimx - 1)) +. minx in + let extra_y_points = + specs + |> List.map (function + | Line_plot_adaptive { callback; cache; _ } -> + Array.init + (if sparse then + dimx / 5 + else + dimx) + (fun i -> + let x = + unscale_x + (if sparse then + i * 5 + else + i) + in + let y = + match Hashtbl.find_opt cache x with + | Some y -> y + | None -> callback x + in + if not (Hashtbl.mem cache x) then Hashtbl.add cache x y; + y) + | _ -> [||]) + |> Array.concat + in + let all_y_points = Array.append given_y_points extra_y_points in + let miny = + if all_y_points = [||] then + 0. + else + Array.fold_left min all_y_points.(0) all_y_points + in + let maxy = + if all_y_points = [||] then + maxx -. minx + else + Array.fold_left max all_y_points.(0) all_y_points + in + let spany = maxy -. miny in + let spany = + if spany <= epsilon_float then + 1.0 + else + spany + in + let scale_1d y = + try Some Float.(to_int @@ (of_int (dimy - 1) *. (y -. miny) /. spany)) + with Invalid_argument _ -> None + in + let scale_2d (x, y) = + try + Some Float.(scale_x x, to_int (of_int (dimy - 1) *. (y -. miny) /. spany)) + with Invalid_argument _ -> None + in + let spread ~i ~dmj = + if sparse then + i mod 10 = 0 && dmj mod 10 = 0 + else + true + in + let update ~i ~dmj px = + if i >= 0 && dmj >= 0 && i < dimx && dmj < dimy then + canvas.(dmj).(i) <- px :: canvas.(dmj).(i) + in + let prerender_scatter ~priority points = + Array.iter + (fun (p, content) -> + match scale_2d p with + | Some (i, j) -> update ~i ~dmj:(dimy - 1 - j) (priority, content) + | None -> ()) + points + in + let prerender_map ~priority callback = + canvas + |> Array.iteri (fun dmj -> + Array.iteri (fun i _ -> + if spread ~i ~dmj then ( + let x = + Float.(of_int i *. spanx /. of_int (dimx - 1)) +. minx + in + let y = + Float.(of_int (dimy - 1 - dmj) *. spany /. of_int (dimy - 1)) + +. miny + in + update ~i ~dmj (priority, callback (x, y)) + ))) + in + specs + |> List.iteri (fun priority -> function + | Scatterplot { points; content } -> + prerender_scatter ~priority (Array.map (fun p -> p, content) points) + | Scatterbag { points } -> prerender_scatter ~priority points + | Line_plot { points; content } -> + let points = Array.map scale_1d points in + let npoints = Float.of_int (Array.length points) in + let rescale_x i = + Float.(to_int @@ (of_int i *. of_int dimx /. npoints)) + in + (* TODO: implement interpolation if not enough points. *) + points + |> Array.iteri (fun i -> + Option.iter (fun j -> + update ~i:(rescale_x i) + ~dmj:(dimy - 1 - j) + (priority, content))) + | Boundary_map { callback; content_true; content_false } -> + prerender_map ~priority (fun point -> + if callback point then + content_true + else + content_false) + | Map { callback } -> prerender_map ~priority callback + | Line_plot_adaptive { callback; cache; content } -> + canvas.(0) + |> Array.iteri (fun i _ -> + if (not sparse) || i mod 5 = 0 then ( + let x = unscale_x i in + let y = + match Hashtbl.find_opt cache x with + | Some y -> y + | None -> + let y = callback x in + Hashtbl.add cache x y; + y + in + scale_1d y + |> Option.iter (fun j -> + update ~i ~dmj:(dimy - 1 - j) (priority, content)) + ))); + minx, miny, maxx, maxy, canvas + +let concise_float = ref (fun ~prec -> Printf.sprintf "%.*g" prec) + +let plot ~prec ~axes ?canvas ?size ~x_label + ~y_label ~sparse embed_canvas specs = + let minx, miny, maxx, maxy, canvas = + plot_canvas ?canvas ?size ~sparse specs + in + let open PrintBox in + let y_label_l = + List.map Char.escaped @@ List.of_seq @@ String.to_seq y_label + in + if not axes then + embed_canvas canvas + else + grid_l + [ + [ + hlist ~bars:false + [ + align ~h:`Left ~v:`Center @@ lines y_label_l; + vlist ~bars:false + [ + line @@ !concise_float ~prec maxy; + align_bottom @@ line @@ !concise_float ~prec miny; + ]; + ]; + embed_canvas canvas; + ]; + [ + empty; + vlist ~bars:false + [ + hlist ~bars:false + [ + line @@ !concise_float ~prec minx; + align_right @@ line @@ !concise_float ~prec maxx; + ]; + align ~h:`Center ~v:`Bottom @@ line x_label; + ]; + ]; + ] + +let scale_size_for_text = ref (0.125, 0.05) + +let explode s = + let s_len = String.length s in + let rec loop pos = + let char_len = ref 1 in + let cur_len () = PrintBox_text.str_display_width s pos !char_len in + while pos + !char_len <= s_len && cur_len () = 0 do + incr char_len + done; + if cur_len () > 0 then + String.sub s pos !char_len :: loop (pos + !char_len) + else + [] + in + loop 0 + +let flatten_text_canvas ~num_specs canvas = + let outputs = + B.map_matrix + (fun bs -> + (* Fortunately, PrintBox_text does not insert \r by itself. *) + List.map + (fun (prio, b) -> + let lines = + String.split_on_char '\n' @@ PrintBox_text.to_string b + in + prio, List.map explode lines) + bs) + canvas + in + let dimj = Array.length canvas in + let dimi = Array.length canvas.(0) in + let canvas = Array.make_matrix dimj dimi (num_specs, " ") in + let update ~i ~j (prio, box) = + if i >= 0 && i < dimi && j >= 0 && j < dimj then + List.iteri + (fun dj -> + List.iteri (fun di char -> + let j' = j + dj and i' = i + di in + if i' >= 0 && i' < dimi && j' >= 0 && j' < dimj then ( + let old_prio, _ = canvas.(j').(i') in + if prio <= old_prio then canvas.(j').(i') <- prio, char + ))) + box + in + Array.iteri + (fun j row -> + Array.iteri + (fun i boxes -> List.iter (fun box -> update ~i ~j box) boxes) + row) + outputs; + Array.map + (fun row -> String.concat "" @@ List.map snd @@ Array.to_list row) + canvas + +let text_based_handler ~render ext = + match ext with + | Plot { specs; x_label; y_label; size = sx, sy; axes; prec } -> + let cx, cy = !scale_size_for_text in + let size = + Float.(to_int @@ (cx *. of_int sx), to_int @@ (cy *. of_int sy)) + in + render + (B.frame + @@ plot ~prec ~axes ~size ~x_label ~y_label ~sparse:false + (fun canvas -> + B.lines @@ Array.to_list + @@ flatten_text_canvas ~num_specs:(List.length specs) canvas) + specs) + | _ -> invalid_arg "PrintBox_ext_plot.text_handler: unrecognized extension" + +let text_handler = text_based_handler ~render:PrintBox_text.to_string + +let md_handler config = + text_based_handler ~render:(PrintBox_md.to_string config) + +let embed_canvas_html ~num_specs canvas = + let size_y = Array.length canvas in + let size_x = Array.length canvas.(0) in + let cells = + canvas + |> Array.mapi (fun y row -> + row + |> Array.mapi (fun x cell -> + List.map + (fun (priority, cell) -> + let is_framed = + match PrintBox.view cell with + | B.Frame _ | B.Grid (`Bars, _) -> true + | _ -> false + in + let frame = + if is_framed then + ";background-color:rgba(255,255,255,1)" + else + "" + in + let z_index = + ";z-index:" ^ Int.to_string (num_specs - priority) + in + let cell = + PrintBox_html.((to_html cell :> toplevel_html)) + in + H.div + ~a: + [ + H.a_style + ("position:absolute;top:" ^ Int.to_string y + ^ "px;left:" ^ Int.to_string x ^ "px" ^ z_index + ^ frame); + ] + [ cell ]) + cell) + |> Array.to_list |> List.concat) + in + let result = + Array.to_list cells |> List.concat + |> H.div + ~a: + [ + H.a_style @@ "border:thin dotted;position:relative;width:" + ^ Int.to_string size_x ^ ";height:" ^ Int.to_string size_y; + ] + in + PrintBox_html.embed_html result + +let html_handler config ext = + match ext with + | Plot { specs; x_label; y_label; size; axes; prec } -> + (PrintBox_html.to_html ~config + (B.frame + @@ plot ~prec ~axes ~size ~x_label ~y_label ~sparse:true + (embed_canvas_html ~num_specs:(List.length specs)) + specs) + :> PrintBox_html.toplevel_html) + | _ -> invalid_arg "PrintBox_ext_plot.html_handler: unrecognized extension" + +let () = + PrintBox_text.register_extension ~key:"Plot" text_handler; + PrintBox_md.register_extension ~key:"Plot" md_handler; + PrintBox_html.register_extension ~key:"Plot" html_handler diff --git a/src/printbox-ext-plot/PrintBox_ext_plot.mli b/src/printbox-ext-plot/PrintBox_ext_plot.mli new file mode 100644 index 0000000..1fed378 --- /dev/null +++ b/src/printbox-ext-plot/PrintBox_ext_plot.mli @@ -0,0 +1,75 @@ +(* This file is free software. See file "license" for more details. *) + +(** {1 Extend {!PrintBox.t} with plots of scatter graphs and line graphs} *) + +(** Specifies a layer of plotting to be rendered on a graph, where all layers share + the same coordinate space. A coordinate pair has the horizontal position first. *) +type plot_spec = + | Scatterplot of { + points: (float * float) array; + content: PrintBox.t; + } (** Places the [content] box at each of the [points] coordinates. *) + | Scatterbag of { points: ((float * float) * PrintBox.t) array } + (** For each element of [points], places the given box at the given coordinates. *) + | Line_plot of { + points: float array; + content: PrintBox.t; + } + (** Places the [content] box at vertical coordinates [points], + evenly horizontally spread. *) + | Boundary_map of { + callback: float * float -> bool; + content_true: PrintBox.t; + content_false: PrintBox.t; + } + (** At evenly and densely spread coordinates across the graph, places either + [content_true] or [content_false], depending on the result of [callback]. *) + | Map of { callback: float * float -> PrintBox.t } + (** At evenly and densely spread coordinates across the graph, places the box + returned by [callback]. *) + | Line_plot_adaptive of { + callback: float -> float; + cache: (float, float) Hashtbl.t; + content: PrintBox.t; + } + (** At evenly and densely spread horizontal coordinates, places the [content] box + at the vertical coordinate returned by [callback] for the horizontal coordinate + of the placement position. *) +[@@deriving sexp_of] + +type graph = { + specs: plot_spec list; + (** Earlier plots in the list take precedence: in case of overlap, their contents + are on top. For HTML, we ensure that framed boxes and grids with bars are opaque. *) + x_label: string; (** Horizontal axis label. *) + y_label: string; (** Vertical axis label. *) + size: int * int; + (** Size of the graphing area in pixels. Scale for characters is configured by + {!scale_size_for_text}. *) + axes: bool; + (** If false, only the graphing area is output (skipping the axes box). *) + prec: int; (** Precision for numerical labels on axes. *) +} +(** A graph of plot layers, with a fixed rendering size but a coordinate window + that adapts to the specified points. *) + +val default_config : graph +(** A suggested configuration for plotting, with intended use: + [Plot {default_config with specs = ...; ...}]. The default values are: + [{ specs = []; x_label = "x"; y_label = "y"; size = 800, 800; axes = true; prec = 3 }] *) + +type PrintBox.ext += + | Plot of graph + (** PrintBox extension for plotting: scatterplots, linear graphs, decision boundaries... + See {!graph} and {!plot_spec} for details. *) + +val box : graph -> PrintBox.t +(** [box graph] is the same as [PrintBox.extension ~key:"Plot" (Plot graph)]. *) + +val concise_float : (prec:int -> float -> string) ref +(** The conversion function for labeling axes. Defaults to [sprintf "%.*g"]. *) + +val scale_size_for_text : (float * float) ref +(** To provide a unified experience across the text and html backends, we treat + the size specification as measured in pixels, and scale it by [!scale_size_for_text] + to get a size measured in characters. The default value is [(0.125, 0.05)]. *) diff --git a/src/printbox-ext-plot/dune b/src/printbox-ext-plot/dune new file mode 100644 index 0000000..28bc1d1 --- /dev/null +++ b/src/printbox-ext-plot/dune @@ -0,0 +1,7 @@ +(library + (name printbox_ext_plot) + (public_name printbox-ext-plot) + (wrapped false) + (modules PrintBox_ext_plot) + (flags :standard -w +a-3-4-44-29 -safe-string) + (libraries printbox tyxml printbox-text printbox-html printbox-md)) diff --git a/src/printbox-html/PrintBox_html.ml b/src/printbox-html/PrintBox_html.ml index 939349a..1f6e093 100644 --- a/src/printbox-html/PrintBox_html.ml +++ b/src/printbox-html/PrintBox_html.ml @@ -7,6 +7,8 @@ module B = PrintBox module H = Html type 'a html = 'a Html.elt +type toplevel_html = Html_types.li_content_fun html +type PrintBox.ext += Embed_html of toplevel_html let prelude = let l = @@ -105,6 +107,16 @@ module Config = struct let tree_summary x c = { c with tree_summary = x } end +let extensions : (string, Config.t -> PrintBox.ext -> toplevel_html) Hashtbl.t = + Hashtbl.create 4 + +let register_extension ~key handler = + if Hashtbl.mem extensions key then + invalid_arg @@ "PrintBox_html.register_extension: already registered " ^ key; + Hashtbl.add extensions key handler + +let embed_html html = B.extension ~key:"Embed_html" (Embed_html html) + let sep_spans sep l = let len = List.length l in List.concat @@ -201,7 +213,7 @@ let to_html_rec ~config (b : B.t) = (match B.view inner with | B.Empty -> H.a ~a:[ H.a_id id ] [] | _ -> raise Summary_not_supported) - | B.Tree _ | B.Link _ -> raise Summary_not_supported + | B.Tree _ | B.Link _ | B.Ext _ -> raise Summary_not_supported in let loop : 'tags. @@ -243,8 +255,9 @@ let to_html_rec ~config (b : B.t) = | B.Tree (_, b, l) -> let l = Array.to_list l in H.div [ fix b; H.ul (List.map (fun x -> H.li [ fix x ]) l) ] - | B.Anchor _ | B.Link _ -> assert false + | B.Anchor _ | B.Link _ | B.Ext _ -> assert false in + let rec to_html_rec b = match B.view b with | B.Tree (_, b, l) when config.tree_summary -> @@ -259,6 +272,13 @@ let to_html_rec ~config (b : B.t) = | B.Empty -> H.a ~a:[ H.a_id id ] [] | _ -> H.a ~a:[ H.a_id id; H.a_href @@ "#" ^ id ] [ to_html_nondet_rec inner ]) + | B.Ext { key = _; ext = Embed_html result } -> result + | B.Ext { key; ext } -> + (match Hashtbl.find_opt extensions key with + | Some handler -> handler config ext + | None -> + failwith @@ "PrintBox_html.to_html: missing extension handler for " + ^ key) | _ -> loop to_html_rec b and to_html_nondet_rec b = match B.view b with diff --git a/src/printbox-html/PrintBox_html.mli b/src/printbox-html/PrintBox_html.mli index 8972141..e36caf8 100644 --- a/src/printbox-html/PrintBox_html.mli +++ b/src/printbox-html/PrintBox_html.mli @@ -5,6 +5,15 @@ open Tyxml type 'a html = 'a Html.elt +type toplevel_html = Html_types.li_content_fun html + +type PrintBox.ext += + | Embed_html of toplevel_html + (** Injects HTML into a box. It is handled natively by [PrintBox_html]. + NOTE: this extension is unlikely to be supported by other backends! *) + +val embed_html : toplevel_html -> PrintBox.t +(** Injects HTML into a box. NOTE: this is unlikely to be supported by other backends! *) val prelude : [> Html_types.style ] html (** HTML text to embed in the "
", defining the style for tables *) @@ -34,6 +43,10 @@ module Config : sig using the [
| : Y : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : M : : : : : : : : : : : : : : : ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : X | ||||
|
| . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . # . . . . . . # . . . . . . . . . # . . . . . . . # . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # . . . . . . . . . . . . . . . # . . . # . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . # . . . . . . # . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # # . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . # . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . # . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # % # # # . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # # # # % # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # # # # # # # . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . . . , , , , , , , , , # # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # % # # % # . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , % # # # % # # # # # % . . # . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # % # % % # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , # # # % % % % # # # # # # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , # % % # % % % # % # % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # % # # # % % % % # # # . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # # # # % # % % % # . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % # # # # % # # % # % # % # . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % # % # # # # % . # . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # # % % % # % # % % % # % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % # # # % # # % % # # % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % # # # % % % # % # # % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # % % # % # % # % % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # % % # % % % # # % . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # % # % # # % % % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # # % # # # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , % # % # % # % # # % # # % % # % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , % , , , , % # % % % % % % % . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . % . , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # % % % % . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % # % # % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % # % % # % # % # % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , % % % % % % % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . % . , , , , , , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % # % # % % # % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % % # # % % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , % , % % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % % % % # % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % # % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . . . , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , # , , , , , , , , , , , , , , , , , , , , , % , , % , , , , , , , , , , % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % , , , , , , , , , , , , , , , , % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , % % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % , , , , , , , , , , , , , , , , % % % % % % % % % % % . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , % % % % % % % % % % % % % . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , % % % % % % % % % . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % % % % . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , % % % % % % % % % . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % % . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % , , , , , , , , % , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % % % % % % % % % % . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % % . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % | ||||
|
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , % , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , % , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , % , , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , % , , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , % , , , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , # # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , # # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , # , , , # % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , # % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , # % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , # , , , , , , , , % # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , % , , , , , , , , , # # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , # # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , # , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , # , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , # % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , % , , , , , , , , , , , , , # # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , # , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , # # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , # , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # # % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # # % . . . . . . . . . . . . . . . . . . . . . . . , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % . . . . . . . . . . . . . . . . . . . . . . , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % . . . . . . . . . . . . . . . . . . . . . , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % . . . . . . . . . . . . . . . . . . . . , # , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % # % . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % # . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # % . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % # . . . . . . . . . . , , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % # . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % % # . . . . . . . . , , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , # % % # . . . . . . . , , , , , , , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % % # . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % % # % . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % # % % # % . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % # % % # % . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % # % % % # . . , , , , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % # % % % % # % . , , , , , , , , % , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , % % % # % % % % % % % % % # % % % % % | ||||
|
| :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , : : : : :
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
: : : : : : : : ; ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : :
: : : : : : : : : : : : : : : ; ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : : , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : : . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : : . . . . . . . . . . . . . . . . . . . . . . . . , , , , , , , , , , , , , , , , , , , , , , , , : : : : : : : :
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|